【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() 会抛出未经检查的异常。

目录
相关文章
|
4月前
|
缓存 Java Maven
CompletableFuture
【7月更文挑战第29天】
46 4
|
4月前
|
Java 开发者 Spring
CompletableFuture 使用总结
CompletableFuture 使用总结
119 1
|
4月前
|
存储 缓存 安全
(八)深入并发之Runnable、Callable、FutureTask及CompletableFuture原理分析
关于Runnable、Callable接口大家可能在最开始学习Java多线程编程时,都曾学习过一个概念:在Java中创建多线程的方式有三种:继承Thread类、实现Runnable接口以及实现Callable接口。但是实则不然,真正创建多线程的方式只有一种:继承Thread类,因为只有`new Thread().start()`这种方式才能真正的映射一条OS的内核线程执行,而关于实现Runnable接口以及实现Callable接口创建出的Runnable、Callable对象在我看来只能姑且被称为“多线程任务”,因为无论是Runnable对象还是Callable对象,最终执行都要交由Threa
|
3月前
|
Java 测试技术
CompletableFuture 使用
CompletableFuture 使用
45 0
|
3月前
CompletableFuture 打桌球的应用
CompletableFuture 打桌球的应用
17 0
|
4月前
|
并行计算 Java
Future、CompletableFuture概述
Future、CompletableFuture概述
89 0
|
Java
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
ExecutorService、Callable、Future实现有返回结果的多线程原理解析
76 0
|
消息中间件 Java 中间件
Future and CompletableFuture
Future代表异步执行的结果,也就是说异步执行完毕后,结果保存在Future里, 我们在使用线程池submit()时需要传入Callable接口,线程池的返回值为一个Future,而Future则保存了执行的结果 ,可通过Future的get()方法取出结果,如果线程池使用的是execute(),则传入的是Runnable接口 无返回值。
71 0