publicclassTestForkJoinPool{publicstaticvoidmain(String[] args){
Instant start = Instant.now();//ForkJoin框架需要ForkJoinPool的支持才能执行。
ForkJoinPool pool =newForkJoinPool();
ForkJoinTask<Long> task =newForkJoinSumCalcuate(0L,100000000L);
Long sum = pool.invoke(task);
System.out.println(sum);
Instant end = Instant.now();
System.out.println("消耗时间为"+ Duration.between(start,end).toMillis());}@Testpublicvoidtest(){
Instant start = Instant.now();long sum =0L;for(Long i =0L; i <=100000000L; i ++){
sum += i;}
System.out.println(sum);
Instant end = Instant.now();
System.out.println("消耗时间为"+ Duration.between(start,end).toMillis());}//java8 新特性@Testpublicvoidtest2(){
Long sum = LongStream.range(0L,100000000L).parallel().reduce(0L,Long::sum);
System.out.println(sum);}}classForkJoinSumCalcuateextendsRecursiveTask<Long>{privatestaticfinallong serialVersionUID =114514212521L;privatelong start;privatelong end;privatestaticfinallong THURSHOLD =10000L;//临界值publicForkJoinSumCalcuate(long start,long end){this.start = start;this.end = end;}@Overrideprotected Long compute(){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;
ForkJoinSumCalcuate left =newForkJoinSumCalcuate(start, middle);
left.fork();//进行拆分
ForkJoinSumCalcuate right =newForkJoinSumCalcuate(middle+1, end);
right.fork();return left.join()+ right.join();//加入线程队列}}}