异步回调

  • Future 设计的初衷: 对将来的某个事件的结果进行建模

  • 异步回调_异步回调

  • /**
     * 异步调用: CompletableFuture
     * 异步执行
     * 成功回调
     * 失败回调
     */
    public class Test01 {
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            /*
            // 没有返回值的 runAsync 异步回调
            CompletableFuturecompletableFuture = CompletableFuture.runAsync(()->{
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"runAsync=>void");
            });
            System.out.println("123");
            completableFuture.get();  //获取阻塞执行结果
            */
    
            // 有返回值的 supplyAsync 异步回调
            // 类似于 ajax,成功和失败的回调
            // 返回的是错误信息;
            CompletableFuturecompletableFuture = CompletableFuture.supplyAsync(() -> {
                System.out.println(Thread.currentThread().getName() + "supplyAsync=>Integer");
                int i = 10 / 0;
                return 1;
            });
            System.out.println(completableFuture.whenComplete((t, u) -> {
                System.out.println("t=>" + t); // 正常的返回结果
                System.out.println("u=>" + u); // 错误信息: java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
            }).exceptionally((e) -> {
                e.getMessage();
                return 0;       // 可以获取到错误的返回结果
            }).get());
        }
    }