Future 设计的初衷:对将来的某个事件的结果进行建模
package com.kuang.future;
import com.kuang.pc.C;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
/**
* 异步调用:CompletableFuture
* 异步执行
* 成功回调
* 失败回调
*
*/
public class Demo01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// //发起一个请求 无返回值 void
// 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("11111");
// 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);//有错误打印错误信息:u=>java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
}).exceptionally(e -> {
System.out.println(e.getMessage());
return 233;//可以获取到错误的返回结果
}).get());
/**
* success code 200
* error code 404 500
*/
}
}