Java 我是否需要一个具有并行流的倒计时锁存器来确保线程等待?

Java 我是否需要一个具有并行流的倒计时锁存器来确保线程等待?,java,multithreading,Java,Multithreading,我有一个对象的树结构。目前,树的头部迭代每个子节点,然后依次迭代其子节点。这都是在单个线程上完成的,但是每个分支都可以并行完成,并且父节点只需要在所有子节点完成任务后返回 我计划使用一个并行流来做这件事,只是想问一下这是否是一个可行的方法。我还想知道是否需要使用如下所示的倒计时闩锁来停止线程进程,直到所有子工作线程都完成 CountDownLatch latch = new CountDownLatch(list size) childObjects.parallelStream().forEa

我有一个对象的树结构。目前,树的头部迭代每个子节点,然后依次迭代其子节点。这都是在单个线程上完成的,但是每个分支都可以并行完成,并且父节点只需要在所有子节点完成任务后返回

我计划使用一个并行流来做这件事,只是想问一下这是否是一个可行的方法。我还想知道是否需要使用如下所示的倒计时闩锁来停止线程进程,直到所有子工作线程都完成

CountDownLatch latch = new CountDownLatch(list size)
childObjects.parallelStream().forEach(child -> {
  child.doSomeTask(data);
  latch.countDown();
})

countDown.await();

考虑使用或结合使用。使用
fork
方法为子节点生成子任务,并使用
join
方法等待子节点完成。我使用countdownlatch尝试了相同的方法parallelStream,后来实现了parallelStream。foreach阻塞调用本身就足够了,不需要countdownlatch。在这里添加countdownlatch不会增加任何值

否,
forEach
正在阻塞-完成后将返回。好的,谢谢。你会说这是一种可接受的并行流方法,还是会使用执行器服务?一段字符串有多长?您是否正在执行独立的操作,这些操作不会改变某些数据的外部状态?你在做别的事吗?这个问题太宽泛了,说得好。每个操作都是独立的,没有共享状态的突变。