Fork/Join框架中的”工作窃取(Work stealing)”
Fork/Join框架在java.util.concurrent包中加入了两个主要的类:
* ForkJoinPool
* ForkJoinTask
ForkJoinPool类是ForkJoinTask实例的执行者,ForkJoinPool的主要任务就是”工作窃取”,其线程尝试发现和执行其他任务创建的子任务。ForkJoinTask实例与普通Java线程相比是非常轻量的。
一 旦ForkJoinTask被启动,就会启动其子任务并等待它们执行完成。执行者ForkJoinPool负责将自任务赋予线程池中处于等待任务状态的另 一线程。线程池中的活动线程会尝试执行其他任务所创建的子任务。ForkJoinPool会尝试在任何时候都维持与可用的处理器数目一样数目的活动线程数
除了几个其他API方法以外,ForkJoinTask有两个主要的方法:
* fork () – 这个方法决定了ForkJoinTask的异步执行,凭借这个方法可以创建新的任务。
* join () – 该方法负责在计算完成侯返回结果,因此允许一个任务等待另一任务执行完成。
分支/合并的完整过程如下.