等待每个CompletableFuture完成

时间:2018-05-29 14:20:13

标签: java completable-future

我想要做的是异步计算树结构的深度,我将拥有树的第一级,我想启动一个异步线程来分别计算每个节点的深度。

在计算过程中,树中可能显然有一个分叉,此时我想要一个额外的线程来计算该分支。

我已经完成了这项工作但是当所有这些未来完成时我需要做一些完成逻辑。但是我遇到了在此过程中产生的额外CompletableFutures的问题。

我将使用什么方法来保存所有起始的CompletableFutures +那些在此过程中动态创建的方法,并且可以在执行任何其他逻辑之前等待所有这些方法完成。

2 个答案:

答案 0 :(得分:0)

您可以尝试从每个CompletableFuture获取值。如果值可用,请检查下一个值。如果它不可用,则在检查下一个值之前,执行将停止当前值。 您可以使用类似于以下内容的代码:

List<CompletableFuture<Integer>> myList = ...
for (CompletableFuture<Integer> c: myList) {
   Integer x = c.get();
   ...
}
// You arrive here only when all the CompletableFuture have returned a 
// value.

答案 1 :(得分:0)

很难说不知道特定用例或某些代码,但您可以使用外部AtomicInteger来保持深度的跟踪。类似的东西:

<div class="content">
  <table id="clientLogin">
    <tr>
      <th>Heading</th>
      <th>Heading</th>
    </tr>
    <tr>
      <td>Cell</td>
      <td>Cell</td>
    </tr>
    <tr>
      <td>Cell</td>
      <td>Cell</td>
    </tr>
  </table>
</div>

另一方面,如果您可以使用Actor库作为Akka或Vertx来遵循这种方法,那会更好。