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

  • 相关阅读:
    用Inno Setup来解决.NetFramework安装问题
    NSIS安装制作基础教程[初级篇], 献给对NSIS有兴趣的初学者
    NSIS
    Nullsoft教程 NSIS初学者图文教程一
    flex 实例Demo
    计算机组成原理
    Spring知识点提炼
    JAVA Web从前端到后台常用框架介绍
    使用navicat将mysql转换成sqlserver
    JDK 5 ~ 10 新特性倾情整理!
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11201298.html
Copyright © 2011-2022 走看看