Fork/Join

匿名 (未验证) 提交于 2019-12-02 23:49:02

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

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

举例:

实现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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!