Fork/Join分支合并框架

Fork/Join分支合并框架

在必要的情况下,将一个大任务拆分成多个小任务(不可再拆分),然后将小任务的计算结果进行汇总。

工作窃取模式

当一个线程上获取不到任务的时候,它将会到其他线程的尾部去截取一个任务来执行。

publicclassThreadTest{publicstaticvoidmain(String[] args){         ForkJoinPool pool=newForkJoinPool();          ForkJoinTask<Long> task=newForkJoinDemo(0L,100000000L);          Long sum= pool.invoke(task);          System.out.println(sum);}}classForkJoinDemoextendsRecursiveTask<Long>{privatestaticfinallong serivalVersionUID=-5235345621564052455L;privatelong start;privatelong end;privatestaticfinallong THURSHOLD=10000L;//临界值publicForkJoinDemo(long start,long end){this.start= start;this.end= end;}@Overrideprotected Longcompute(){long length= end- start;if(length<=THURSHOLD){long sum=0L;for(long i=start;i< end;i++){                 sum+=i;}return sum;}else{long middle=(start+ end)/2;             ForkJoinDemo left=newForkJoinDemo(start,middle);             left.fork();//进行拆分,压入队列             ForkJoinDemo right=newForkJoinDemo(middle+1,end);             right.fork();return left.join()+ right.join();}}}