1.ForkJoin框架是一个为了发挥多核CPU优势,充分利用CPU资源的一个任务并行执行框架,它可以将一个大任务拆分成若干个子任务,然后再由子任务合并最终得到执行结果。
2.示例代码
public class Demo extends RecursiveTask<Integer> {
private int begin;
private int end;
public Demo(int begin, int end) {
this.begin = begin;
this.end = end;
}
@Override
protected Integer compute() {
int sum = 0;
if (end - begin <= 2) {
// 计算最小粒度子任务
for (int i = begin; i <= end; i++) {
sum += i;
}
} else {
// 拆分任务
Demo demo1 = new Demo(begin, (begin + end) / 2);
Demo demo2 = new Demo((begin + end) / 2 + 1, end);
// 执行任务
demo1.fork();
demo2.fork();
// 合并子任务结果
Integer value1 = demo1.join();
Integer value2 = demo2.join();
sum = value1 + value2;
}
return sum;
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
ForkJoinPool pool = new ForkJoinPool();
ForkJoinTask<Integer> future = pool.submit(new Demo(1, 100));
System.out.println("干点其他事...");
System.out.println("计算的值为: " + future.get());
}
}