ForkJoin
什么是ForkJoin
在JDK1.7,并行执行任务!提高效率,大数据量!
大数据:Map Reduce(把大任务拆成小任务)
ForkJoin特点:工作窃取
这里维护的都是双端队列
ForkJoin的操作
package com.bjw.ForkJoin;
import java.util.concurrent.RecursiveTask;
/*
* 求和计算的任务
* 3000 6000(ForkJoin) 6000(Stream并行流)
* 如何使用ForkJoin
* 1、ForkJoinPool
* 2、计算任务
* 3、计算类
* */
public class ForkJoinDemo extends RecursiveTask<Long> {
private Long start;
private Long end;
//临界值
private Long temp = 10000L;
public ForkJoinDemo(Long start, Long end) {
this.start = start;
this.end = end;
}
//计算方法
@Override
protected Long compute() {
if((end - start) < temp) {
Long sum = 0L;
for (Long i = start; i <= end ; i++) {
sum += i;
}
return sum;
}else {
long middle = (start + end) / 2; //中间值
ForkJoinDemo task1 = new ForkJoinDemo(start, middle);
task1.fork(); //拆分任务,把任务压入线程队列
ForkJoinDemo task2 = new ForkJoinDemo(middle + 1, end);
task2.fork(); //拆分任务,把任务压入线程队列
return task1.join() + task2.join();
}
}
public static void main(String[] args) {
}
}
异步回调
package com.bjw.future;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/*
* 异步调用:CompletableFuture
* 异步执行
* 成功回调
* 失败回调
* */
public class Demo1 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
/* // 没有返回值的runAsync异步回调
CompletableFuture<Void> completableFuture = CompletableFuture.runAsync(()->{
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"runAsync=>Void");
});
System.out.println("1111");
completableFuture.get();// 获取阻塞执行结果*/
// 有返回值的supplyAsync异步回调
// ajax,成功和失败的回调
// 返回的是错误信息
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread().getName()+"supplyAsync=>Integer");
return 1024;
});
System.out.println(completableFuture.whenComplete((t, u) -> {
System.out.println("t=>" + t); //正常的返回结果
System.out.println("u=>" + u); //错误信息
}).exceptionally((e) -> {
e.printStackTrace();
return 233;
}).get());
}
}