异步回调,无返回值
// 异步回调,无返回值
CompletableFuture<Void> future = new CompletableFuture<>().runAsync(()->{
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"runAsync");
});
try {
future.get(); //阻塞等待任务执行完成
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
异步回调有返回值
CompletableFuture<Integer> future = new CompletableFuture<Integer>().supplyAsync(()->{
System.out.println(Thread.currentThread().getName()+"supplyAsync");
int t = 5 / 0;
return 100;
});
System.out.println("syso:"+future.whenComplete((t,u)->{
System.out.println("t = "+t); // 返回的结果,失败为null
System.out.println("u = "+u); // 错误信息
}).exceptionally(new Function<Throwable, Integer>() {
@Override
public Integer apply(Throwable t) {
return -1;
}
}).get());

image.png
网友评论