首页 > 其他 > 详细

JUC-分支合并框架

时间:2019-08-28 21:28:21      阅读:69      评论:0      收藏:0      [点我收藏+]

一、原理

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();
?    }?}

 

JUC-分支合并框架

原文:https://www.cnblogs.com/minmin123/p/11426334.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!