Случай использования 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 раз.

Другие вопросы по тегам