JUC-异步回调CompletableFuture的使用

150 阅读1分钟

Future

Future接口在Java 5中被引入,设计初衷是对将来某个时刻会发生的结果进行建模。它建模了一种异步计算,返回一个执行运算结果的引用,当运算结束后,这个引用被返回给调用方。

CompletableFuture

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class CompletableFutureTest {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
       //无返回值的异步调用
        CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(
                () -> {try{
                    TimeUnit.SECONDS.sleep(2);
                }catch (InterruptedException e) {
                    e.printStackTrace();
                }
                    System.out.println("end");
                });
        System.out.println("finish then");
        voidCompletableFuture.get();
        // 有返回值的异步调用
        CompletableFuture<String> uCompletableFuture = CompletableFuture.supplyAsync(() -> {
            try{
                TimeUnit.SECONDS.sleep(2);
               // int i=1/0;
            }catch (InterruptedException e) {
                e.printStackTrace();
            }
            return "2.end";

        });
        System.out.println("2.start");
        System.out.println(uCompletableFuture.get());
        uCompletableFuture.whenComplete((u,t)->{
            System.out.println(u);//正常的返回结果
            System.out.println(t);// 错误信息

        });
    }
}