Junior — Middle
104
Hogyan szervezhető meg a szinkronizáció úgy, hogy egy szál várjon két másik szál befejezésére?
Válasz az MI-től
sobes.tech MI
В 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();
// Продолжаем работу
Оба способа позволяют организовать ожидание завершения нескольких потоков.