Fork/Join 框架实现了ExecutorService接口,提供了充分利用多处理器的功能。那些可以递归分解为许多小任务的非常适合使用这种方式。Fork/Join 框架采用了“工作窃取算法”——空闲的线程可以从繁忙的线程那些“窃取”一些任务。
Fork/Join 框架的核心是类ForkJoinPool,该类是AbstractExecutorService的子类,实现了“工作窃取算法”。可以执行ForkJoinTask任务
用伪代码表示逻辑如下
if (任务被分解得足够小了) {
处理该这个任务
} else {
将任务分解成两部分,分别执行,等待结果
}
将这段代码写进ForkJoinTask的一个实现类中,可以是继承RecursiveTask或者RecursiveAction,借此,然后调用ForkJoinTask的invoke方法。
在Java标准库中,java.util.Arrays中parallelSort也是利用了Fork/Join框架。