Java并发编程原理与实战三十二:ForkJoin框架详解

1、Fork/Join框架有什么用呢?

-------》Fork使用来切分任务,Join是用来汇总结果。举个简单的栗子:任务是1+2+3+...+100这个任务(当然这个任务的结果有好的算法去做,现在是用笨方法去计算这个结果)。
------》适合在多核环境下,单核环境使用ForkJoin没什么意思。简单来说就是,一个任务切割成多个小的任务,这些小的任务分配给多个CPU去执行,从而达到提高CPU的执行率。
public class Demo extends RecursiveTask {

private int begin;
private int end;
public Demo(int begin, int end) {
this.begin = begin;
this.end = end;
}
@Override
protected Integer compute() {
System.out.println(Thread.currentThread().getName() + " ... ");
int sum = 0;
// 拆分任务
if (end - begin <= 2) {
// 计算
for (int i = begin; i <= end; i++) {
sum += i;
}
} else {
// 拆分
Demo d1 = new Demo(begin, (begin + end) / 2);
Demo d2 = new Demo((begin + end)/2 + 1, end);
// 执行任务
d1.fork();
d2.fork();
Integer a = d1.join();
Integer b = d2.join();
sum = a + b;
}
return sum;
}

public static void main(String[] args) throws Exception {
ForkJoinPool pool = new ForkJoinPool(3);
Future future = pool.submit(new Demo(1, 100));
System.out.println("....");
System.out.println("计算的值为:" + future.get());
}
}
总结:
-----》当我们的CPU不够强劲的时候,使用ForkJoin的话,会很损耗我们的CPU资源。不太适合我们小的PC电脑上运行,适合运行在Linux环境下的。
我们要记住两点就基本可以了。
1、在多核环境下,使用ForkJoin确实能提高执行性能
2、能提高CPU的利用率
 
个人感觉这个ForkJoin框架使用起来,还有有点难度的,开发人员只需要关注怎样用ForkJoin就可以了,则关注任务是怎样切分的。本人觉得怎样切,也是有点难度。-_-||   (还是看具体使用场景吧。。。)
 
参考资料:
《java并发编程与实战》龙果学院

posted on 2018-08-19 21:37  pony1223  阅读(483)  评论(0编辑  收藏  举报

导航