我正在阅读java.util.concurrent API,发现
CountDownLatch
:一种同步辅助,它允许一个或多个线程等待,直到在其他线程中执行的一组操作完成为止。 CyclicBarrier
:一种同步辅助工具,它允许一组线程互相等待以到达一个公共(public)的障碍点。 在我看来,这两者是平等的,但我相信还有更多的东西。
例如,在
CoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrier
中。两者之间还有其他区别吗?
有人想要重置倒计时值的
use cases
是什么? 最佳答案
一个主要区别是CyclicBarrier承担了一个(可选)可运行任务,该任务在满足公共(public)屏障条件后运行。
它还允许您获取在障碍处等待的客户端数量以及触发障碍所需的数量。触发后,屏障将重置并可以再次使用。
对于简单的用例-服务启动等... CountdownLatch很好。 CyclicBarrier对于更复杂的协调任务很有用。这样的事情的一个例子是并行计算-在计算中涉及多个子任务-类似于MapReduce。