CompletionStage<String> hello() { return alphaReference.thenCompose(alpha -> // At this point BlockingAlpha is ready // But getMessage() is also blocking worker.performBlocking(alpha::getMessage) // Finally modify the final message .thenApply(m -> "Hello " + m + "!")); }