1.2.1 概念
ForkJoinPool是由JDK1.7后提供多线程并行执行任务的框架。可以理解为一种特殊的线程池。
1.任务分割:Fork(分岔),先把大的任务分割成足够小的子任务,如果子任务比较大的话还要对子任务进行继续分割。
2.合并结果:join,分割后的子任务被多个线程执行后,再合并结果,得到最终的完整输出。
1.2.2 组成
-
ForkJoinTask:主要提供fork和join两个方法用于任务拆分与合并;一般用子类 RecursiveAction(无返回值的任务)和RecursiveTask(需要返回值)来实现compute方法。
ForkJoinPool:调度ForkJoinTask的线程池;
ForkJoinWorkerThread:Thread的子类,存放于线程池中的工作线程(Worker);
-
WorkQueue:任务队列,用于保存任务;
1.2.3 基本使用
一个典型的例子:计算1-1000的和
package com.test.thread;
import java.util.concurrent.*;
public class SumTask {
private static final Integer MAX = 100;
static class SubTask extends Rec