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*/}}