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 подскажет развёрнутый ответ в реальном времени.