Mediumlatchbarrier

Что такое CountDownLatch и CyclicBarrier?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

CountDownLatch — одноразовый счётчик: потоки ждут, пока он обнулится. CyclicBarrier — многоразовый барьер: потоки ждут друг друга на точке, после освобождения сбрасывается.

// CountDownLatch: дождаться N потоков
CountDownLatch latch = new CountDownLatch(3);
// каждый worker: latch.countDown();
latch.await();   // main ждёт

// CyclicBarrier: N потоков ждут друг друга на фазе
CyclicBarrier barrier = new CyclicBarrier(N, () -> System.out.println("phase done"));
// каждый поток: barrier.await();
  • Latch не сбрасывается, barrier — многоразовый (параллельные фазы);
  • Phaser (Java 7) — гибкий барьер с динамическим числом сторон и фаз;
  • Semaphore — permits для ограничения параллелизма (пул соединений, rate limiter): sem.acquire(); /* work */ sem.release();;
  • Exchanger — обмен значениями между двумя потоками.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.