如何从两个CompletableFutures中返回值?

时间:2016-06-03 23:20:02

标签: java multithreading

我有一段带有两个CompletableFuture的Java代码,如下所示:

CompletableFuture<Boolean> future1 = CompletableFuture.supplyAsync(() ->
        doThing1(withThis));

CompletableFuture<Boolean> future2 = CompletableFuture.supplyAsync(() -> 
        doThing2(withThat));

我想比赛这两个CompletableFuture并获取第一个结果布尔值并将其存储在变量中。但是,我还要确保未来的运行时间不会超过60秒(尽管这是不必要的)。然后我想确保这两个CompletableFuture都被杀死,我的程序只在主线程上恢复。

我怎样才能简单可靠地将其拉下来?或者,我是否使用了错误的工具来完成手头的工作?

1 个答案:

答案 0 :(得分:0)

您可以使用CompletableFuture.anyOf()。然后调用get等待执行。

CompletableFuture<Object> future3 = CompletableFuture.anyOf(future1, future2);
Boolean result = (Boolean) futur3.get();
return result;