Back to questions
Junior — Middle
57
Каким образом организовать синхронизацию так, чтобы один поток ожидал завершения выполнения двух других потоков?
Answer from AI
sobes.tech AI
В Java для того, чтобы один поток ожидал завершения двух других, можно использовать метод join() у потоков.
Пример:
Thread t1 = new Thread(() -> {
// код первого потока
});
Thread t2 = new Thread(() -> {
// код второго потока
});
t1.start();
t2.start();
// Главный поток ожидает завершения t1 и t2
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
// После этого можно продолжать работу, зная, что оба потока завершились
Также можно использовать более продвинутые средства синхронизации, например, CountDownLatch из java.util.concurrent:
CountDownLatch latch = new CountDownLatch(2);
Thread t1 = new Thread(() -> {
// работа
latch.countDown();
});
Thread t2 = new Thread(() -> {
// работа
latch.countDown();
});
t1.start();
t2.start();
// Ожидаем, пока оба потока вызовут countDown()
latch.await();
// Продолжаем работу
Оба способа позволяют организовать ожидание завершения нескольких потоков.