Как работи методът Thread.join()?
sobes.tech AI
Отговор от 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("Работният поток приключи.");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
worker.start();
try {
// Основният поток чака да приключи работният поток
worker.join();
System.out.println("Основният поток продължава след приключване на работния.");
} catch (InterruptedException e) {
e.printStackTrace();
}
Важно: join() синхронизира изпълнението на един поток с приключването на друг. Това е полезно, когато трябва да гарантирате, че дадена задача е завършена, преди да продължите в друг поток.