Случай использования CountDownLatch, где CyclicBarrier не может быть использован
Для меня разница между CountDownLatch и CyclicBarrier заключается только в том, что CyclicBarrier предоставляет дополнительные функциональные возможности, чем CountDownLatch, так как вы можете выполнить определенную задачу, когда все потоки достигнут точки барьера. В циклическом барьере вы не найдете ни потоков ожидания, ни потоков прибытия. Таким образом, это означает, что мы можем использовать CyclicBarrier везде, где используется CountDownLatch. Пожалуйста, поправьте меня, если я ошибаюсь. Так почему CountDownLatch приведен в Java. Почему это не рекомендуется, если мы можем выполнять эти функции с CyclicBarrier.
1 ответ
CyclicBarier
ждет определенного количества потоков, пока CountDownLatch
ожидает определенного количества событий (один поток может вызвать CountDownLatch.countDown()
несколько раз). CountDownLatch
не может быть повторно использован после открытия. Также поток, который вызывает CountDownLatch.countDown()
только сигнализирует, что он закончил некоторые вещи. Это не блокирует (и в CyclicBarrier.await()
является методом блокировки) и может продолжать делать некоторые другие вещи.
От Javadoc
CountDownLatch, инициализированный N, может использоваться, чтобы заставить один поток ждать, пока N потоков не выполнили какое-либо действие или какое-либо действие было выполнено N раз.