博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java CompletableFuture:allOf等待所有异步线程任务结束
阅读量:6161 次
发布时间:2019-06-21

本文共 2016 字,大约阅读时间需要 6 分钟。

private void method() throws ExecutionException, InterruptedException {        CompletableFuture
f1 = CompletableFuture.supplyAsync(() -> { try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } return "f1"; }); f1.whenCompleteAsync(new BiConsumer
() { @Override public void accept(String s, Throwable throwable) { System.out.println(System.currentTimeMillis() + ":" + s); } }); CompletableFuture
f2 = CompletableFuture.supplyAsync(() -> { try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } return "f2"; }); f2.whenCompleteAsync(new BiConsumer
() { @Override public void accept(String s, Throwable throwable) { System.out.println(System.currentTimeMillis() + ":" + s); } }); CompletableFuture
all = CompletableFuture.allOf(f1, f2); //阻塞,直到所有任务结束。 System.out.println(System.currentTimeMillis() + ":阻塞"); all.join(); System.out.println(System.currentTimeMillis() + ":阻塞结束"); //一个需要耗时2秒,一个需要耗时3秒,只有当最长的耗时3秒的完成后,才会结束。 System.out.println("任务均已完成。"); }

输出:

06-12 20:16:37.400 31142-31142/zhangphil.test I/System.out: 1528805797400:阻塞06-12 20:16:39.406 31142-31171/zhangphil.test I/System.out: 1528805799406:f206-12 20:16:40.404 31142-31170/zhangphil.test I/System.out: 1528805800404:f106-12 20:16:40.404 31142-31142/zhangphil.test I/System.out: 1528805800404:阻塞结束 任务均已完成。

可以看到f2很快就返回,是因为f2仅耗时2秒。f1需要耗时3秒,因此在f2结束后一秒,f1也返回。此时才执行join后的代码。
---------------------
作者:zhangphil
来源:CSDN
原文:https://blog.csdn.net/zhangphil/article/details/80670593?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的文章
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>
并发容器之CopyOnWriteArrayList(转载)
查看>>
什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
查看>>
原创:goldengate从11.2升级到12.1.2
查看>>
Quartz
查看>>
正则表达式的语法规则
查看>>
C#一个关于委托和事件通俗易懂的例子
查看>>
类似于SVN的文档内容差异对比工具winmerge
查看>>
Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
查看>>
quratz线程
查看>>
execnet: rapid multi-Python deployment
查看>>
windows修改3389端口
查看>>
关于JavaScript词法
查看>>
FreeSwitch中的会议功能(4)
查看>>
MySQL中创建用户分配权限(到指定数据库或者指定数据库表中)
查看>>
AutoReleasePool 和 ARC 以及Garbage Collection
查看>>
重新想象 Windows 8 Store Apps (9) - 控件之 ScrollViewer 基础
查看>>
乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
查看>>
MVP Community Camp 社区大课堂
查看>>