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