Назад к вопросам
Middle
71
questionbank

Как работает метод Thread.join()?

Sobes Copilot

Получайте ответы в реальном времени

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

sobes.tech AI

Метод Thread.join() заставляет текущий выполняющийся поток ждать завершения потока, на который вызван join.

При вызове otherThread.join(), текущий поток (например, поток main) блокируется до тех пор, пока otherThread не закончит свое выполнение (его метод run() вернет управление).

Можно указать таймаут в миллисекундах или в миллисекундах и наносекундах:

  • otherThread.join(long millis): ожидает максимум millis миллисекунд.
  • otherThread.join(long millis, int nanos): ожидает максимум millis миллисекунд и nanos наносекунд.

Если указанный таймаут истекает, а поток еще не завершился, текущий поток разблокируется и продолжит выполнение.

Thread.join() может выбросить InterruptedException если текущий поток прерывается во время ожидания. В этом случае ожидание прекращается.

Пример:

// Создаем и запускаем новый поток
Thread worker = new Thread(() -> {
    try {
        // Имитация работы
        Thread.sleep(2000);
        System.out.println("Worker thread finished.");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

worker.start();

try {
    // Main поток ждет завершения worker потока
    worker.join();
    System.out.println("Main thread continues after worker finished.");
} catch (InterruptedException e) {
    e.printStackTrace();
}

Важно: join() синхронизирует выполнение одного потока с завершением другого. Это полезно, when вам нужно гарантировать, что определенная задача будет завершена, прежде чем продолжить выполнение в другом потоке.