CountDownLatch позволяет одному или нескольким потокам ждать, когда другие потоки завершат свою работу. Это полезно, когда вы хотите запустить определенные действия только после выполнения нескольких предварительных задач.Пример кода:
import java.util.concurrent.CountDownLatch;
public class CountDownLatchExample {
public static void main(String[] args) throws InterruptedException {
// Создаем CountDownLatch для трех потоков
CountDownLatch latch = new CountDownLatch(3);
// Запускаем три потокa
for (int i = 0; i < 3; i++) {
new Thread(new Task(latch)).start();
}
// Основной поток ждет, пока все потоки завершатся
latch.await();
System.out.println("Все задачи завершены, продолжение работы основного потока.");
}
}
class Task implements Runnable {
private final CountDownLatch latch;
public Task(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
// Симуляция работы
Thread.sleep((long) (Math.random() * 1000));
System.out.println("Задача завершена: " + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
// Уменьшаем счетчик
latch.countDown();
}
}
}
Описание кода:
1. Создание CountDownLatch: Мы создаем объект
CountDownLatch с начальным значением 3, что означает, что основной поток будет ожидать завершения трех потоков.2. Запуск потоков: В цикле запускаем три потока, каждый из которых выполняет задачу.
3. Ожидание завершения: В основном потоке вызываем
latch.await(), который блокирует его выполнение до тех пор, пока счетчик не достигает нуля.4. Задача: Каждый поток выполняет свою задачу (симуляция работы) и вызывает
latch.countDown() в блоке finally, уменьшая счетчик.Когда все три потока завершатся, основной поток продолжит выполнение и выведет сообщение.
#java #CountDownLatch
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👍2