您可以使用
CompletionStage.thenCompose(Function)
与
CompletableFuture.allOf(CompletableFuture...)
. 的通用签名
Function
使用人
thenCompose
是:
Function<? super T, ? extends CompletionStage<U>>
.
public CompletableFuture<Void> loadAndApply(SomeObject object) {
return loadData().thenCompose(data ->
CompletableFuture.allOf(
CompletableFuture.runAsync(() -> object.setA(processA(data)), swingExecutor),
CompletableFuture.runAsync(() -> object.setB(processB(data)), backgroundExecutor)
) // End of "allOf"
); // End of "thenCompose"
} // End of "loadAndApply"
这有一个额外的好处。在代码中,您当前使用的
thenAcceptAsync
舞台必须等待
thenApplyAsync
在执行前完成的阶段。当使用上述两者时
setA
和
setB
将在各自的执行者中并发运行。
为了方便起见,这是JavaDoc
allOf
:
返回一个新的completeTableFuture,当所有
给定完成的Futures完成。如果给定
可完成期货异常完成,然后返回
CompleteTableFuture也会这样做,并保留CompletionException
这一例外是其原因。否则,如果有的话,
给定的可完成期货不反映在返回的
但可以通过检查来获得
个别地。如果没有提供完整的Futures,则返回
CompleteTableFuture已完成,值为空。
这种方法的应用之一是等待集合的完成。
在继续一个项目之前,独立完成的期货,如:
completeTableFuture.allof(c1,c2,c3).join();。
…还有JavaDoc
然后合成
:
返回与以下值相同的新CompletionStage
给定函数返回的CompletionStage。
当此阶段正常完成时,用
这个阶段的结果作为论点,返回另一个
完成阶段。当该阶段正常完成时,
此方法返回的CompletionStage使用相同的
价值。
为确保进度,所提供的函数必须最终
结果完成。
此方法类似于可选的.flatmap和stream.flatmap。
有关包含异常的规则,请参阅CompletionStage文档
完成。
注:
CompletableFuture
,实现
CompletionStage
,覆盖
然后合成
但使返回类型更具体(返回
复杂的未来
而不是
完成阶段
)
.