Sobes.tech
Назад к вопросам
Junior — Middle
56

Каким образом организовать синхронизацию так, чтобы один поток ожидал завершения выполнения двух других потоков?

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

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();

// Продолжаем работу

Оба способа позволяют организовать ожидание завершения нескольких потоков.