Вопрос объясняет механизм CountDownLatch для синхронизации потоков.
CountDownLatch позволяет одному или нескольким потокам ждать, пока другие потоки не завершат работу. Счётчик уменьшается при вызове countDown(), и ожидающие потоки разблокируются при достижении нуля.
Основные методы:
CountDownLatch(int count): Создаёт объект с начальным счётчиком.
countDown(): Уменьшает счётчик на 1.
await(): Блокирует поток, пока счётчик не станет 0.
Пример:
CountDownLatch latch = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
new Thread(() -> {
doWork();
latch.countDown(); // Уменьшаем счётчик
}).start();
}
latch.await(); // Ждём, пока все потоки не завершатся
System.out.println("Все потоки завершили работу");Когда использовать:
Для ожидания завершения нескольких задач перед продолжением.
В тестах для синхронизации потоков.