异步回调
Future设计的初衷:对将来的某个事件结果进行建模
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
/**
* 异步调用: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()+"runAsync=>Void");
});
System.out.println("1111111111111");
completableFuture.get();//获取阻塞执行结果*/
//有返回值的supplyAsync异步回调
//ajax,成功和失败的回调
//返回的是错误信息
CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(()->{
System.out.println("completableFuture"+"supplyAsync=>Integer");
return 1024;});
completableFuture.whenComplete((t,u)->{
System.out.println("t=>"+t);//正常的返回结果
System.out.println("u=>"+u);//错误信息
}).exceptionally((e)->{
System.out.println(e.getMessage());
return 233;//可以获取到错误的返回结果
});
}
}