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

  • 相关阅读:
    git ssh keys
    git 修改 email
    git 撤销commit
    企微调试模式
    ORACLE 根据某个字段固定值进行分区
    Apache FtpClient login失败
    Oracle序列
    Oracle merage into
    Oracle all_tables 以及常用sql
    性能优化-使用高性能的库fastutil
  • 原文地址:https://www.cnblogs.com/quyangyang/p/11201298.html
Copyright © 2011-2022 走看看