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