前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CompletableFuture 组合处理 allOf 和 anyOf太赞了!

CompletableFuture 组合处理 allOf 和 anyOf太赞了!

原创
作者头像
码农架构
修改2021-06-15 10:56:17
16.3K0
修改2021-06-15 10:56:17
举报
文章被收录于专栏:码农架构码农架构

allOf 和 anyOf 可以组合任意多个 CompletableFuture。函数接口定义如下所示。

首先,这两个函数都是静态函数,参数是变长的 CompletableFuture 的集合。其次,allOf 和 anyOf 的区别,前者是「与」,后者是「或」。

例 1:allOf

allOf 的返回值是 CompletableFuture<Void>类型,这是因为 每个传入的 CompletableFuture 的返回值都可能不同,所以组合的结果是 无法用某种类型来表示的,索性返回 Void 类型。那么,如何获取每个 CompletableFuture 的执行结果呢?

参看下面的例子: 并行地下载 100 个网页。待下载完成之后,统计在 100 个网页中,含有某个单词的网页个数。

这里有个关键问题,因为allof没有返回值,所以通过theApply,给allFutures附上一个回调函数。在回调函数里面,以此调用么一个Future的Get()函数,获取到100个结果,存入List<String>

接下里要做就是统计这100个网页中,含有单词[XXX] 的网页的个数

例 2:anyOf

anyOf 的含义是只要有任意一个 CompletableFuture 结束,就可以做 接下来的事情,而无须像 AllOf 那样,等待所有的 CompletableFuture 结束。

但由于每个 CompletableFuture 的返回值类型都可能不同,任意一个, 意味着无法判断是什么类型,所以 anyOf 的返回值是 CompletableFuture<Object>类型。 考虑下面的例子。

在该例子中,因为future1、future2、future3的返回值都是CompletableFuture<String>,所以anyOf的返回的Object一定也是 String 类型。

并且在 3 个 future 中,future2 睡眠时间最短,会最先执行完成, anyOfFuture.get()获取的也就是 future2 的内容。future1、future3 的 返回结果被丢弃了

回顾整个CompletableFuture的用法主要可概括为以下几点

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 例 1:allOf
  • 例 2:anyOf
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档