异步回调(Future的实现类)
* 异步调用:Ajax 异步执行-成功回调-失败回调 * CompletableFuture 是我们的异步回调 异步执行-成功回调-失败回调
使用 runAsync 这个方法就是没有返回值的!
public static void test1() throws ExecutionException, InterruptedException {
//发起一个请求 <Void>:表示没有返回值 runAsync异步回调,没有返回值
CompletableFuture<Void> completableFuture1 = CompletableFuture.runAsync(()->{
try {
TimeUnit.SECONDS.sleep(2); //延迟2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"runAsync => Void");
});
System.out.println("1111111");
completableFuture1.get();//获取执行结果
}
使用 supplyAsync 这个方法就是有返回值的!
public static void test2() throws ExecutionException, InterruptedException {
//发起一个请求 <Integer>:表示返回一个Integer的值 supplyAsync异步回调,有返回值
CompletableFuture<Integer> completableFuture2 = CompletableFuture.supplyAsync(()->{
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"supplyAsync => Void");
int i=10/0;
return 1024;
});
completableFuture2.whenComplete((t,u)->{
System.out.println("t=>"+t); //正常的返回结果
System.out.println("u=>"+u); //输出错误信息 u=>java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
}).exceptionally((e)->{
System.out.println(e.getMessage());
return 131313; //返回错误的结果
}).get();
}