Как работает метод 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 вам нужно гарантировать, что определенная задача будет завершена, прежде чем продолжить выполнение в другом потоке.