Java的 分支合并框架 是以递归方式将可以并行的任务拆分成更小的任务,然后将每个子任务的结果合并起来生成整体结果。它是ExecutorService接口的一个实现,它把子任务分配给线程池(称为ForkJoinPool)中的工作线程。
该框架由 JDK1.7 提供,思想类似于 分治法,只不过是并行执行。要使用它首先需要创建 RecursiveTask<V> 的一个子类,然后定义任务和子任务,提交到 ForkJoinPool 工作线程池中进行并行任务。要定义 RecursiveTask,只需要实现一个抽象方发即可:
/**
* The main computation performed by this task.
*/
protected abstract V compute();
这个方法同时定义了将任务拆分成子任务的逻辑,以及无法在拆分或不方便再拆分时生成单个子任务结果的逻辑。
递归拆分过程:
- fork():利用另一个 ForkJoinPool 线程异步执行新创建的子任务
- join():读取第一个子任务的结果,尚未完成就等待
这里列一个经典的并行求和的实例:
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
public class ForkJoin ex