CountDownLatch предназначен для простых случаев, когда тебе нужна одноразовая точка синхронизации — по сути, механизм «старт/стоп». CyclicBarrier подходит для более сложных сценариев координации, когда нескольким потокам нужно неоднократно синхронизироваться на разных этапах, например при реализации алгоритмов MapReduce.
CountDownLatch:
CyclicBarrier:
CyclicBarrier принимает опциональный параметр Runnable task, который автоматически выполняется после того, как все потоки достигают барьера. Это позволяет тебе выполнять дополнительную логику в точках синхронизации без явного кода координации.
Используй CountDownLatch когда:
Используй CyclicBarrier когда:
Главное отличие — переиспользуемость: CountDownLatch одноразовый и не сбрасывается, а CyclicBarrier циклический и сбрасывается автоматически, что делает его идеальным для итеративных паттернов синхронизации в сложных многопоточных приложениях.
CountDownLatch можно сбросить и переиспользовать несколько раз после того, как его счётчик достигнет нуля, что делает его подходящим для итеративных паттернов синхронизации, похожих на CyclicBarrier.
Новый — ещё не проверен сообществом
Вы