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