Java之异步回调
Future 设计的初衷: 对将来的某个事件的结果进行建模
/**
* 异步调用: 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());
});
//completableFuture.get(); // 获取阻塞执行结果
// 这里的get是获得 执行完后的返回值,这里的返回值为void,所以打印出来的结果是null,
// 可以理解为get就是获得返回值,如果在get的时候方法还没执行完就会等待执行,而不是get的时候才开始执行
System.out.println("111111111");
completableFuture.get();
*/
// 异步是目的,而多线程是实现它的方法
// 有返回值的 supplyAsync 异步回调
// ajax,成功和失败的回调
// 返回的是错误信息
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(()->{
int i = 10/0;
return 1024;
});
completableFuture.whenComplete((t,u)->{
System.out.println("t=>"+t); // 正常的返回结果
System.out.println("u=>"+u); // 错误信息,没错误null
}).exceptionally((e)->{
e.printStackTrace(); // 打印堆栈信息
System.out.println(e.getMessage()); // 打印错误日志
// 失败了返回233
return 233;
}.get());
/**
* succee Code 200
* error Code 404 500
*/
}
}