Как устроен CountDownLatch и когда он разблокирует потоки?

Как устроен CountDownLatch? синхронизатор из Java concurrency создаётся с начальным счётчиком метод await() приостанавливает поток, пока счётчик не станет равен 0 метод countDown() уменьшает значение счётчика на 1…

Короткий ответ

Что ответить на собеседовании

Как устроен CountDownLatch? синхронизатор из Java concurrency создаётся с начальным счётчиком метод await() приостанавливает поток, пока счётчик не станет равен 0 метод countDown() уменьшает значение счётчика на 1 после достижения нуля все ожидающие потоки продолжают выполнение подходит для ожидания завершения группы потоков помогает согласованно запускать задачи или дожидаться их завершения

Подробный разбор

Ответ с пояснениями

Как устроен CountDownLatch?

  • синхронизатор из Java concurrency
  • создаётся с начальным счётчиком
  • метод await() приостанавливает поток, пока счётчик не станет равен 0
  • метод countDown() уменьшает значение счётчика на 1
  • после достижения нуля все ожидающие потоки продолжают выполнение
  • подходит для ожидания завершения группы потоков
  • помогает согласованно запускать задачи или дожидаться их завершения

Подробный ответ

Основной ответ

CountDownLatch — синхронизатор из пакета java.util.concurrent, с помощью которого один или несколько потоков могут дождаться завершения заданного числа операций, выполняемых в других потоках. Поток блокируется до тех пор, пока счётчик не уменьшится до нуля. После этого все ожидающие потоки возобновляют работу.

Ключевые моменты

  • При инициализации задаётся число — счётчик событий или операций, которые должны завершиться до продолжения работы.
  • Поток вызывает метод await() и приостанавливается, если счётчик ещё не равен нулю, ожидая его уменьшения.
  • После выполнения задачи другие потоки вызывают countDown(), уменьшая счётчик на единицу.
  • Как только значение счётчика становится равным нулю, все заблокированные потоки автоматически разблокируются.
  • В отличие от CyclicBarrier, CountDownLatch является одноразовым синхронизатором и повторно запущен быть не может.

Практический контекст

CountDownLatch часто применяют, когда нужно дождаться завершения нескольких потоков — например, параллельной загрузки данных и последующей синхронизации результата. Его также используют для одновременного запуска потоков после завершения подготовки, то есть как стартовый барьер. В проектах на Java 8+ это простой и удобный механизм координации параллельных задач с гарантией их завершения.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку