什么是 ForkJoin
ForkJoin 在 JDK 1.7 , 并行执行任务!提高效率。大数据量!
大数据:Map Reduce (把大任务拆分为小任务)

ForkJoin 特点:工作窃取
这个里面维护的都是双端队列 
ForkJoin


代码:
java
package com.mystpet.ForkJoinTest;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.ForkJoinTask;
import java.util.concurrent.FutureTask;
import java.util.stream.LongStream;
/**
* 同一个任务,别人效率高你几十倍!
*/
public class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// test1();//4847
// test2();//1526
test3();//82
}
//普通程序员
public static void test1(){
Long sum=0L;
long start=System.currentTimeMillis();
for(Long i = 1L; i <= 10_0000_0000; i++){
sum=sum+i;
}
long end=System.currentTimeMillis();
System.out.println(("sum="+sum+"时间:"+(end-start)));
}
//会使用ForkJoin
public static void test2() throws ExecutionException, InterruptedException {
long start=System.currentTimeMillis();
//建立线程池
ForkJoinPool forkJoinPool=new ForkJoinPool();
//制造任务
ForkJoinTask<Long> task=new ForkJoinDemo(1L,10_0000_0000L);
//提交任务到线程池
ForkJoinTask<Long> submit=forkJoinPool.submit(task);
long sum=submit.get();
long end=System.currentTimeMillis();
System.out.println(("sum="+sum+"时间:"+(end-start)));
}
//stream并行流
public static void test3() throws ExecutionException, InterruptedException {
long start=System.currentTimeMillis();
long sum = LongStream
.rangeClosed(1L, 10_0000_0000L)
.parallel()
.reduce(0, Long::sum);
long end=System.currentTimeMillis();
System.out.println(("sum="+sum+"时间:"+(end-start)));
}
}