十、分支合并框架
10.1 原理
Fork
:把一个复杂任务进行分拆,大事化小
Join
:把分拆任务的结果进行合并
10.2 相关类
-
ForkJoinPool
分支合并池 类比
=>
线程池 -
ForkJoinTask
ForkJoinTask 类比
=>
FutureTask -
RecursiveTask
递归任务:继承后可以实现递归(自己调自己)调用的任务
10.3 demo
/**
* 分支合并框架
* ForkJoinPool
* ForkJoinTask
* RecursiveTask
*/
public class ForkJoinDemo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
MyTask myTask = new MyTask(0, 100);
ForkJoinPool threadPool = new ForkJoinPool();
ForkJoinTask<Integer> forkJoinTask = threadPool.submit(myTask);
System.out.println(forkJoinTask.get());
threadPool.shutdown();
}
}
import java.util.concurrent.RecursiveTask;
public class MyTask extends RecursiveTask<Integer> {
private static final Integer ADJUST_VALUE = 10;
private int begin;
private int end;
private int result;
public MyTask(int begin, int end) {
this.begin = begin;
this.end = end;
}
@Override
protected Integer compute() {
if ((end - begin) <= ADJUST_VALUE) {
for (int i = begin; i <= end; i++) {
result = result + i;
}
} else {
int middle = (end + begin) / 2;
MyTask task01 = new MyTask(begin, middle);
MyTask task02 = new MyTask(middle + 1, end);
task01.fork();
task02.fork();
result = task01.join() + task02.join();
}
return result;
}
}