什么时候使用 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效率更高
在 CompletableFuture
的上下文中,我理解 thenApply(..)
可以使用当前线程并且可以使用预定义的执行器(例如 ForkJoinPool),而 thenApplyAsync(..)
确保预定义的执行器将始终使用已定义的执行程序。
据我所知,thenApplyAsync(..)
似乎更 "reliable",因为它从不阻塞当前线程,而 thenApply(..)
可能令人惊讶。
我的问题:使用 thenApply(..)
而不是 thenApplyAsync(..)
哪个 example/scenario 有效?
谢谢,克里斯托夫
是的,thenApplyAsync
会使用一些执行器。这意味着必须创建一些 Runnable 对象并将其放入执行程序的队列中。如果这个CompletableFuture
完成后你要执行的函数很简单,那么直接调用这个方法可能比创建信封Runnable效率更高