首页 > 其他 > 详细

Fork/Join

时间:2019-07-17 16:03:55      阅读:91      评论:0      收藏:0      [点我收藏+]

用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。

 

多线程的目的不仅仅是提高程序运行的性能,但是可以充分利用CPU资源

 

fork()    在当前线程运行的线程池中安排一个异步执行。简单的理解就是再创建一个子任务。

join()    当任务完成的时候返回计算结果。

invoke()    开始执行任务,如果必要,等待计算完成。

 

举例:

实现1 到 100 相加

 1 public class Demo extends RecursiveTask<Integer>{
 2 
 3     private int begin;
 4     private int end;
 5 
 6     public Demo(int begin, int end) {
 7         this.begin = begin;
 8         this.end = end;
 9     }
10 
11     @Override
12     protected Integer compute() {
13         int sum = 0;
14         //拆分任务
15         if (end - begin <= 2){
16             for (int i = begin;i<=end;i++){
17                 sum += i;
18             }
19         }else {
20             //拆分
21             Demo d1 = new Demo(begin,(begin+end)/2);
22             Demo d2 = new Demo((begin+end)/2+1,end);
23 
24             d1.fork();
25             d2.fork();
26 
27             Integer a = d1.join();
28             Integer b = d2.join();
29             sum = a+b;
30         }
31         return sum;
32     }
33 
34     public static void main(String[] args) throws Exception {
35         ForkJoinPool pool = new ForkJoinPool();
36 
37         Future<Integer> future = pool.submit(new Demo(1,100));
38 
39         System.out.println("do something...");
40 
41         System.out.println("计算的值为:"+ future.get());
42 
43     }
44 }

Console:

do something...
计算的值为:5050

 

Fork/Join

原文:https://www.cnblogs.com/quyangyang/p/11201298.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!