什么时候使用 CompletableFuture#thenApply(..) 而不是 thenApplyAsync(..)?

When to use CompletableFuture#thenApply(..) over thenApplyAsync(..)?

CompletableFuture 的上下文中,我理解 thenApply(..) 可以使用当前线程并且可以使用预定义的执行器(例如 ForkJoinPool),而 thenApplyAsync(..) 确保预定义的执行器将始终使用已定义的执行程序。

据我所知,thenApplyAsync(..) 似乎更 "reliable",因为它从不阻塞当前线程,而 thenApply(..) 可能令人惊讶。

我的问题:使用 thenApply(..) 而不是 thenApplyAsync(..) 哪个 example/scenario 有效?

谢谢,克里斯托夫

是的,thenApplyAsync 会使用一些执行器。这意味着必须创建一些 Runnable 对象并将其放入执行程序的队列中。如果这个CompletableFuture完成后你要执行的函数很简单,那么直接调用这个方法可能比创建信封Runnable效率更高