p196 completableFuture启动异步任务
无返回值
public static ExecutorService executorService = Executors.newFixedThreadPool(10);
public static void main(String[] args) {
System.out.println("main start---");
CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
System.out.println("当前线程:" + Thread.currentThread().getId());
int i = 10 / 2;
System.out.println("运行结果:" + i);
}, executorService);
System.out.println("main end---");
}
有返回值
public static ExecutorService executorService = Executors.newFixedThreadPool(10);
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main start---");
//可以获取结果
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println("当前线程:" + Thread.currentThread().getId());
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
}, executorService);
Integer result = completableFuture.get();
System.out.println(result);
System.out.println("main end---");
}
p197completableFuture完成回调与异常感知
public static ExecutorService executorService = Executors.newFixedThreadPool(10);
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main start---");
//可以获取结果
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println("当前线程:" + Thread.currentThread().getId());
int i = 10 / 0;
System.out.println("运行结果:" + i);
return i;
}, executorService).whenComplete(new BiConsumer<Integer, Throwable>() {
//可以获取到结果 或者异常信息
@Override
public void accept(Integer integer, Throwable throwable) {
System.out.println("异步任务完成,结果为:"+integer+",异常为:"+throwable);
}
}).exceptionally( (throwable)->{//如果出现异常,可以自定义返回结果
return 10;
});
Integer result = completableFuture.get();
System.out.println(result);
System.out.println("main end---");
}
p198 handler最终处理
public static ExecutorService executorService = Executors.newFixedThreadPool(10);
public static void main(String[] args) throws ExecutionException, InterruptedException {
System.out.println("main start---");
//可以获取结果
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println("当前线程:" + Thread.currentThread().getId());
int i = 10 / 2;
System.out.println("运行结果:" + i);
return i;
}, executorService).handle((res,throwable)->{
if (res!=null){
return res*2;
}
if (throwable!=null){
return 0;
}
return 0;
});
System.out.println("结果:"+completableFuture.get());
System.out.println("main end---");
}
p199线程串行化方法
p200 两任务组合
p201 两任务组合 一个完成
p202多任务组合
等待多个任务全部结束
只需要任意一个任务执行结束