the*_*oop 9 java future fork-join forkjoinpool completable-future
在Java 8中,有两种方法可以启动异步计算 - CompletableFuture和ForkJoinTask.它们看起来都非常相似 - 内部类CompletableFuture甚至延伸ForkJoinTask.
是否有理由使用其中一个?
我可以看到的一个关键区别是该CompletableFuture.join方法只是阻塞直到将来完成(waitingGet只是使用a旋转ManagedBlocker),而a ForkJoinTask.join可以从队列中窃取工作以帮助您加入的任务完成.
有没有超过一个或另一个的好处?
他们是两回事,ForkJoinTask是可以提交给的任务ForkJoinPool,CompletableFuture是可以与任何人一起工作的承诺,Executor执行者不必是ForkJoinPool,
的确,ForkJoinPool如果您未指定任何公用名称,则默认为公用名称,例如:
CompletableFuture.supplyAsync(()-> supplier);
Run Code Online (Sandbox Code Playgroud)
使用了ForkJoinPool,如果你不及格的Executor。还有另一个overload需要一个Executor。
CompletableFuture.supplyAsync(()-> supplier,executor);
Run Code Online (Sandbox Code Playgroud)
Async,它是extends中的一个static类,但从的文档中不必是,CompletableFutureForkJoinTask<Void>ForkJoinTaskAsync
/ **基类可以充当FJ或普通Runnable * /
abstract static class Async extends ForkJoinTask<Void>
implements Runnable, AsynchronousCompletionTask
Run Code Online (Sandbox Code Playgroud)
它也可以Runnable和AsynchronousCompletionTask
刚上侧面说明:ForkJoinTask,ForkJoinPool,ForkJoin...在1.7和1.8不添加类
我会说,ForkJoinTask当您有一个大任务并希望将其拆分以在多个子任务中并行运行时,更推荐使用。该ForkJoin框架使用工作窃取算法,该算法将有效利用线程。另一方面,CompletableFutures更适合反应式编程模型,您可以在其中以同步或异步方式创建执行管道,并通过使用 Executor Service 的线程池更好地控制线程。
| 归档时间: |
|
| 查看次数: |
3037 次 |
| 最近记录: |