public class ForkJoinTest {
private static final Integer DURATION_VALUE = 200;
static class ForkJoinSubTask extends RecursiveTask<Integer> {
// 子任务开始计算的值
private Integer startValue;
// 子任务结束计算的值
private Integer endValue;
private ForkJoinSubTask(Integer startValue, Integer endValue) {
this.startValue = startValue;
this.endValue = endValue;
}
@Override
protected Integer compute() {
//小于一定值DURATION,才开始计算
if (endValue - startValue < DURATION_VALUE) {
System.out.println("子任务计算:开始值 = " + startValue + ";结束值 = " + endValue);
Integer totalValue = 0;
for (int index = this.startValue; index <= this.endValue; index++) {
totalValue += index;
}
return totalValue;
} else {
// 将任务拆分,拆分成两个任务
ForkJoinSubTask subTask1 = new ForkJoinSubTask(startValue, (startValue + endValue) / 2);
subTask1.fork();
ForkJoinSubTask subTask2 = new ForkJoinSubTask((startValue + endValue) / 2 + 1, endValue);
subTask2.fork();
return subTask1.join() + subTask2.join();
}
}
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
// Fork/Join框架的线程池
ForkJoinPool pool = new ForkJoinPool();
ForkJoinTask<Integer> taskFuture = pool.submit(new ForkJoinSubTask(1, 1000));
Integer result = taskFuture.get();
System.out.println("结果是:" + result);
}
}
Fork/join Code 范例
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 并发多个任务执行最终把结果合并,想到了Fork/Join框架。在JDK1.7 Concurrent包提供了一种Fo...
- java 中的fork join框架 fork join框架是java 7中引入框架,这个框架的引入主要是为了提升...
- 现实生活中的分治 分治的思想,顾名思义分而治之。就像古代的王想治理好天下,单单靠他一个人是不够的,还需要大臣的辅助...