美文网首页
10、异步回调(Future)

10、异步回调(Future)

作者: i小雨 | 来源:发表于2020-11-23 15:10 被阅读0次

没有返回值的异步回调(runAsync):

public class TestFuture {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //发起一个异步请求(没有返回值)
        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("main线程");

        completableFuture.get();//获取阻塞执行结果
    }
}

结果:

main线程
ForkJoinPool.commonPool-worker-1runAsync=>Void

有返回值的异步回调(supplyAsync):

返回成功:

public class TestFuture {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //有返回值的异步回调(supplyAsync)
        //有成功和失败的回调
        CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName()+"supplyAsync=>Integer");
            return 1024;
        });
        completableFuture.whenComplete((t,u)->{   //执行成功
            System.out.println("t->"+t);//正常的返回结果
            System.out.println("u->"+u); 
        }).exceptionally((e)->{ //执行失败
            System.out.println(e.getMessage());
            return 203;
        }).get();
    }
}

结果:

ForkJoinPool.commonPool-worker-1supplyAsync=>Integer
t->1024
u->null

返回失败:

public class TestFuture {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //有返回值的异步回调(supplyAsync)
        //有成功和失败的回调
        CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {
            System.out.println(Thread.currentThread().getName()+"supplyAsync=>Integer");
            int i = 10/0; //测试异步回调返回错误
            return 1024;
        });
        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) -> {
            System.out.println(e.getMessage());
            return 203;
        }).get());
    }
}

结果:

ForkJoinPool.commonPool-worker-1supplyAsync=>Integer
t->null
u->java.util.concurrent.CompletionException: java.lang.ArithmeticException: / by zero
java.lang.ArithmeticException: / by zero
203

相关文章

  • 10、异步回调(Future)

    没有返回值的异步回调(runAsync): 结果: 有返回值的异步回调(supplyAsync): 返回成功: 结...

  • Flutter进阶篇(4)-- Flutter的Future异步

    Flutter中的异步其实就是用的Dart里面的Future,then函数,回调catchError这些东西。下面...

  • Java并发:Callable异步回调Future、Future

    简单说明: Callable接口类似于Runnable,但是Runnable不会返回结果,并且无法抛出返回结果的异...

  • Future--Demo

    创建Future (){}为Future的回调例如: Flutter相关回调函数 future中的函数: then...

  • CompletableFuture 详解

    JAVA8之前的Future CompletableFuture的优势 提供了异步程序执行的另一种方式:回调,不需...

  • Flutter线程进阶——深入async-await异步编程原理

    async-await基本介绍 async-await本质上是对Future API的简化形式,将异步回调代码写成...

  • 异步的实现

    异步的三种实现方式: 回调函数事件Promise 回调函数 回调函数不一定是异步 但是异步一定是回调函数。 事件 ...

  • 同步、异步

    同步:等待结果异步:不等待结果 注意,异步常常伴随回调一起出现,但是异步不是回调,回调也不一定是异步。 【时序图】...

  • 异步和回调

    异步 异步就是「不等结果」,直接进行下一步怎么拿到结果回调可以拿到结果 回调 「回调是一种拿异步结果的方式」「回调...

  • flutter 同时执行多个异步请求回调

    flutter中提供了Future.wait()函数,可以在执行多个异步请求之后有一个统一的回调结果,但是劣势在于...

网友评论

      本文标题:10、异步回调(Future)

      本文链接:https://www.haomeiwen.com/subject/omndiktx.html