Fork/Join

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

 

多线程的目的不仅仅是提高程序运行的性能,但是可以充分利用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

 

posted @ 2019-07-17 15:29  曲阳阳  阅读(189)  评论(0编辑  收藏  举报