异步回调

2022-12-18  本文已影响0人  arkliu

异步回调,无返回值

// 异步回调,无返回值
CompletableFuture<Void> future = new CompletableFuture<>().runAsync(()->{
    try {
        TimeUnit.SECONDS.sleep(3);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(Thread.currentThread().getName()+"runAsync");
});
try {
    future.get(); //阻塞等待任务执行完成
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}

异步回调有返回值

CompletableFuture<Integer> future = new CompletableFuture<Integer>().supplyAsync(()->{
            System.out.println(Thread.currentThread().getName()+"supplyAsync");
            int t = 5 / 0;
            return 100;
        });
        
        System.out.println("syso:"+future.whenComplete((t,u)->{
            System.out.println("t = "+t); // 返回的结果,失败为null
            System.out.println("u = "+u); // 错误信息
        }).exceptionally(new Function<Throwable, Integer>() {

            @Override
            public Integer apply(Throwable t) {
                return -1;
            }
        }).get());
image.png
上一篇 下一篇

猜你喜欢

热点阅读