• (摘录自狂乱的贵公子)所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的方法。在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结果。但调用者仍需要取线程的计算结果。
  • (摘录自狂乱的贵公子)在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合 CompletableFuture 的方法。
  • (摘录自狂乱的贵公子)它可能代表一个明确完成的Future,也有可能代表一个完成阶段( CompletionStage ),它支持在计算完成以后触发一些函数或执行某些动作。

如下实现案列

1.定义单个任务处理

private CompletableFuture<ContractResult> singleGenerateContract(String str) {
CompletableFuture<ContractResult> contractResultCompletableFuture = CompletableFuture.supplyAsync(() -> {
  });

return contractResultCompletableFuture;
}
2.将所有子任务放到集合总
List<CompletableFuture<ContractResult>> completableFutures = Lists.newArrayList();
String str="demo";

completableFutures.add(singleGenerateContract(str);
3. 使用allOf方法来表示所有的并行任务(allOf是等待所有任务完成,构造后CompletableFuture完成)
CompletableFuture<Void> allFutures =
CompletableFuture
.allOf(completableFutures.toArray(new CompletableFuture[completableFutures.size()]));

4. 获得所有子任务的处理结果
CompletableFuture<List<ContractResult>> finalResults = allFutures.thenApply(v -> {
return completableFutures.stream().map(completableFuture -> completableFuture.join())
.collect(Collectors.toList());
});

												

最新文章

  1. maven 本地仓库和远程仓库
  2. java中的函数参数
  3. Mysql查询按照某字段指定顺序排序
  4. 【转】ETL数据增量抽取——通过触发器方式实现
  5. Navi.Soft30.开放平台.百度.开发手册
  6. (二)Protobuf的C#使用
  7. 【转】VS2013 C#WinForm程序构造界面拖动控件NumericUpDown时&quot;未响应“是有道词典惹的祸
  8. ASP.NET 使用application和session对象写的简单聊天室程序
  9. 利用kvc对UITabBar上的UITabBarButton的尝试修改.md
  10. 复习IOS多线程知识
  11. iOS--NSNetService和NSNetServiceBrowser(Bonjour网络编程)
  12. poj 1704 Georgia and Bob(阶梯博弈)
  13. JUnit-4.11使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误
  14. HBase学习(十四)LINUX下用Eclipse构建HBase开发环境
  15. Oracle优化技术
  16. GREENPLUM简单介绍
  17. Visual Studio 2012设置Jquery/Javascript智能提示
  18. TextView赋值int型,并显示
  19. jQuery实践-别踩白块儿网页版
  20. Python简介之输入和输出

热门文章

  1. err has no member, has initializer but incomplete type
  2. 红米note9 刷开机第一屏logo
  3. go常见的坑
  4. accessservice对于难定位的view如何定位
  5. TCP协议之四次挥手
  6. 如何将多个TXT合并成一个TXT,文件名称提取
  7. 在docker中导入python的包时ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
  8. springboot中实现逆向工程
  9. centos8 安装docker启动失败
  10. 题解[HEOI2013]SAO.md