Назад к вопросам
Альфа-Банк
Senior
11
Для чего использовал CountDownLatch? Чем отличается от CyclicBarrier?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
CountDownLatch и CyclicBarrier — это синхронизаторы из java.util.concurrent, но они служат разным целям.
CountDownLatch используется для ожидания, пока определённое количество операций завершится. Он инициализируется с числом, и каждый вызов countDown() уменьшает счётчик. Когда счётчик достигает нуля, ожидающие потоки продолжают работу. CountDownLatch нельзя перезапустить — он одноразовый.
CyclicBarrier позволяет группе потоков ждать друг друга, пока все не достигнут барьера. После того, как все потоки вызовут await(), барьер сбрасывается и может использоваться повторно (цикличен).
Пример использования CountDownLatch:
CountDownLatch latch = new CountDownLatch(3);
// В потоках:
latch.countDown();
// В основном потоке:
latch.await(); // ждём, пока все 3 countDown вызовутся
Пример использования CyclicBarrier:
CyclicBarrier barrier = new CyclicBarrier(3, () -> System.out.println("Все потоки достигли барьера"));
// В потоках:
barrier.await(); // ждём друг друга
Итого:
- CountDownLatch — одноразовый, для ожидания завершения операций.
- CyclicBarrier — цикличный, для синхронизации группы потоков на определённой точке.