对我来说,CountDownLatch和CyclicBarrier之间的区别仅在于CyclicBarrier提供了比CountDownLatch更多的功能,就像你可以在所有线程到达障碍点时执行某个任务。您可以在循环屏障中找不到等待线程和没有到达线程。所以这意味着我们可以在使用CountDownLatch的所有地方使用CyclicBarrier。如果我错了,请纠正我。那么为什么CountDownLatch在java中给出。如果我们可以使用CyclicBarrier执行这些功能,为什么不弃用。
答案 0 :(得分:0)
CyclicBarier
等待一定数量的线程,而CountDownLatch
等待一定数量的事件(一个线程可以多次调用CountDownLatch.countDown()
)。一旦打开,CountDownLatch
就无法重复使用。调用CountDownLatch.countDown()
的线程也只表示它完成了一些东西。它没有阻止(并且在CyclicBarrier.await()
中是阻塞方法)并且可以继续做其他一些事情。
来自javadoc
CountDownLatch初始化为N. 可以用来让一个线程等到N个线程都有 完成了某些操作,或某些操作已完成N次。