异步回调
Future
Future设计的初衷: 对将来的某个事件的结果进行建模


/*
异步调用:Ajax
1.异步执行
2.成功回调
3.失败回调
*/
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() + " runAsync=>Void");
// });
//
// System.out.println("1111");
//
// completableFuture.get();//阻塞获取执行结果
// 有返回值的 supplyAsync异步回调
// ajax,成功和失败的回调
// 返回的是错误信息
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
System.out.println(Thread.currentThread().getName() + " supplyAsync=>Integer");
int i = 1 / 0;
return 1024;
});
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) -> {
System.out.println(e.getMessage());
return 233;//可以获取到错误的返回结果
}).get());
}
}

浙公网安备 33010602011771号