【CompletableFuture】CompletableFuture中join()和get()方法的区别

简介: 【CompletableFuture】CompletableFuture中join()和get()方法的区别

相同点:

  join()和get()方法都是阻塞调用它们的线程(通常为主线程)来获取CompletableFuture异步之后的返回值。

这里再强调一下:

CompletableFuture.get() 和 CompletableFuture.join() 这两个方法是获取异步守护线程的返回值的。

ps: stage就是 CompletionStage 也就是 CompletableFuture 实现的接口,意思就是每一个 CompletableFuture的任务返回都是一个stage

看代码:

public class Test {
    static   Integer RES = 0;
    public static Integer multipart(Integer a){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        RES=30;
        return a*a;
    }
 
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> multipart(5));
       // System.out.println(future.join());
        System.out.println(RES);
    }
 
}

结果:

0
 
Process finished with exit code 0

把注释去掉后结果:

25
30
 
Process finished with exit code 0

不同点:

get() 方法会抛出经检查的异常,可被捕获,自定义处理或者直接抛出。

而 join() 会抛出未经检查的异常。

目录
相关文章
|
7月前
CompletableFuture
CompletableFuture
26 0
|
7月前
|
Java
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
45 0
|
8月前
|
Java 数据处理 数据库
CompletableFuture 使用
CompletableFuture 使用
42 0
|
9月前
|
消息中间件 Java 中间件
Future and CompletableFuture
Future代表异步执行的结果,也就是说异步执行完毕后,结果保存在Future里, 我们在使用线程池submit()时需要传入Callable接口,线程池的返回值为一个Future,而Future则保存了执行的结果 ,可通过Future的get()方法取出结果,如果线程池使用的是execute(),则传入的是Runnable接口 无返回值。
40 0
|
9月前
|
Java 调度
并发编程——Future & CompletableFuture
Java创建线程的方式,一般常用的是Thread,Runnable。如果需要当前处理的任务有返回结果的话,需要使用Callable。Callable运行需要配合Future。
30 0
|
Java 测试技术
CompletableFuture使用详解
CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口
237 0
CompletableFuture使用详解
|
Java 测试技术 Linux
CompletableFuture调用OpenFegin,谁用谁傻
当调用FeignBlockdingloadBalancerClient使用并行流(多线程)会有问题。
278 0
CompletableFuture调用OpenFegin,谁用谁傻
|
消息中间件 Dubbo Kafka
CompletableFuture学习
前面我们已经知道CompletionService是可以解决Future带来的阻塞问题的,同时我们除了前面我们看到的take方法之外,还可以使用poll方法,这样可以使你的程序免受阻塞之苦。因为poll方法也是无阻塞性的。同时在kafka的源码中,我们如果使用消费者的话,可以看到会使用一个基于future的poll方法。同时我们可以在dubbo的新版本2.7中,可以看到其异步编程采用的就是我们要介绍的CompletableFuture。因此,我们有必要了解CompletableFuture,同时其也是真正意义上的异步编程的实现。
120 0
CompletableFuture学习
|
关系型数据库 MySQL
CompletableFuture的使用案例
CompletableFuture的使用案例
199 0