Sobes.tech
Назад к вопросам
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 — цикличный, для синхронизации группы потоков на определённой точке.