我需要一个带并行流的倒计时锁存器来确保线程等待吗?

时间:2018-06-14 19:01:24

标签: java multithreading

我有一个对象的树形结构。当前,树的头部遍历每个子节点,然后迭代它的子节点。这一切都是在一个线程上完成的,但是每个分支都可以并行完成,父进程只需要在所有子节点完成任务时返回。

我打算使用并行流来执行此操作,只是想问一下这是否正常。我还想知道是否需要使用如下所示的倒计时锁存器来停止线程进行直到所有子工作线程都完成。

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

countDown.await();

2 个答案:

答案 0 :(得分:0)

请考虑将RecursiveTaskRecursiveActionForkJoinPool结合使用。使用fork方法为子节点生成子任务,并使用join方法等待其完成。

答案 1 :(得分:0)

我尝试了使用countdownlatch的方法parallelStream,后来意识到parallelStream.foreach阻塞调用本身就不需要countdownlatch。添加countdownlatch不会在此处添加任何值。