zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Lightoj 1082【RMQ】
    hrbust1444 逃脱 【BFS】
    萌新学习笔记之哈夫曼树
    lightoj 1085【离散化+树状数组】
    CodeForces 586D【BFS】
    lightoj 1089 【离散化+线段树】
    lightoj 1088【树状数组+离散化】
    《算法导论》笔记 第6章 6.2保持堆的性质
    《算法导论》笔记 第6章 6.1堆
    【python】__all__
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11201298.html
Copyright © 2011-2022 走看看