zoukankan      html  css  js  c++  java
  • JUC-分支合并框架

    一、原理

    Fork:把一个复杂任务进行分拆,大事化小 

    Join:把分拆任务的结果进行合并

    ForkJoinPool

    分支合并池    类比=>   线程池

    ForkJoinTask

    ForkJoinTask    类比=>   FutureTask

    RecursiveTask

    递归任务:继承后可以实现递归(自己调自己)调用的任务

     class Fibonacci extends RecursiveTask<Integer> { 
       final int n; 
       Fibonacci(int n) { this.n = n; } 
       Integer compute() { 
         if (n <= 1) 
           return n; 
         Fibonacci f1 = new Fibonacci(n - 1); 
         f1.fork(); 
         Fibonacci f2 = new Fibonacci(n - 2); 
         return f2.compute() + f1.join(); 
       } 
     } 
    //代码

    import
      java.util.concurrent.ExecutionException;


    import  java.util.concurrent.ForkJoinPool;


    import  java.util.concurrent.ForkJoinTask;
    import  java.util.concurrent.RecursiveTask;
    

class  MyTask  extends  RecursiveTask<Integer>{
    
     private static final  Integer  ADJUST_VALUE  =  10 ;

         private int  begin ;
    
     private int  end ;
    
     private int  result ;
    

     public  MyTask( int  begin,  int  end) {
    
         this . begin  = begin;
    
         this . end  = end;
    
    }
    

     @Override

         protected  Integer compute() {
    
         if (( end  -  begin )<= ADJUST_VALUE ){

                for ( int  i = begin ;i <=  end ;i++){
    
                 result  =  result  + i;

               }
    
        } else {

                 int  middle = ( begin  +  end )/ 2 ;
    
            MyTask task01 =  new  MyTask( begin ,middle);

                MyTask task02 =  new  MyTask(middle+ 1 , end );
    
            task01.fork();

                task02.fork();
    
            result  =  task01.join() + task02.join();
    
        }



             return  result ;
    
    }
}




    /**
 * 分支合并例子
 * ForkJoinPool
 * ForkJoinTask
 * RecursiveTask
 */

    public class  ForkJoinDemo {


         public static void  main(String[] args)  throws  ExecutionException, InterruptedException {
            MyTask myTask =  new  MyTask( 0 , 100 );
    
        ForkJoinPool forkJoinPool =  new  ForkJoinPool();
    
        ForkJoinTask<Integer> forkJoinTask = forkJoinPool.submit(myTask);
    

        System. out .println(forkJoinTask.get());
    

        forkJoinPool.shutdown();
    
    }
}
  • 相关阅读:
    PHP设计模式之----简单工厂模式
    PHP设计模式之----单例模式
    php排序算法
    PHP代码实现二分法查找
    Centos 7 下安装PHP7.2(与Apache搭配的安装方式)
    PHPSTORM Live-Templates变量速查表
    Centos 7 设置ip地址
    Centos 7下编译安装Apache
    Centos 7下编译安装Mysql
    apache配置Directory目录权限的一些配置
  • 原文地址:https://www.cnblogs.com/minmin123/p/11426334.html
Copyright © 2011-2022 走看看