/**
* 异步调用: CompletableFuture
* 异步执行
* 成功回调
* 失败回调
*/
public class Test01 {
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("123");
completableFuture.get(); //获取阻塞执行结果
*/
// 有返回值的 supplyAsync 异步回调
// 类似于 ajax,成功和失败的回调
// 返回的是错误信息;
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName() + "supplyAsync=>Integer");
int i = 10 / 0;
return 1;
});
System.out.println(completableFuture.whenComplete((t, u) -> {
System.out.println("t=>" + t); // 正常的返回结果
System.out.println("u=>" + u); // 错误信息: java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
}).exceptionally((e) -> {
e.getMessage();
return 0; // 可以获取到错误的返回结果
}).get());
}
}