如何为未知数量的线程设置countdownlatch

时间:2019-12-25 12:42:37

标签: java multithreading concurrency

我必须启动未知数量的线程,然后等待或所有线程完成其工作。我正在使用执行程序服务。我尝试使用countdownlatch-这样我可以等到倒数为零。  但是我无法获得已经启动的线程数。有人可以告诉我如何实现这一目标吗?

2 个答案:

答案 0 :(得分:0)

如果要合并CompletableFutures的列表,可以执行以下操作:

// Waits for *all* futures to complete and returns a list of results.
// If *any* future completes exceptionally then the resulting future will also complete exceptionally.

public static <T> CompletableFuture<List<T>> all(List<CompletableFuture<T>> futures) {
    CompletableFuture[] cfs = futures.toArray(new CompletableFuture[futures.size()]);

    return CompletableFuture.allOf(cfs)
            .thenApply(ignored -> futures.stream()
                                    .map(CompletableFuture::join)
                                    .collect(Collectors.toList())
            );
}

有关Future&CompletableFuture的更多详细信息,有用的链接:

  1. 未来:https://www.baeldung.com/java-future
  2. CompletableFuture:https://www.baeldung.com/java-completablefuture
  3. CompletableFuture:https://www.callicoder.com/java-8-completablefuture-tutorial/
  4. Waiting on a list of Future

答案 1 :(得分:0)

感谢您的回复。我遇到了答案,它有所帮助。共享链接以供参考。 Flexible CountDownLatch?