Jak funguje metoda Thread.join()?
sobes.tech AI
Odpověď od AI
Metoda Thread.join() způsobí, že aktuálně běžící vlákno bude čekat na dokončení vlákna, na které bylo voláno join.
Voláním otherThread.join() je aktuální vlákno (například vlákno main) zablokováno, dokud otherThread nedokončí svou činnost (jeho metoda run() se nevrátí).
Lze specifikovat časový limit v milisekundách nebo v milisekundách a nanosekundách:
otherThread.join(long millis): čeká maximálněmillismilisekund.otherThread.join(long millis, int nanos): čeká maximálněmillismilisekund ananosnanosekund.
Pokud vyprší uvedený časový limit a vlákno ještě neskončilo, aktuální vlákno se odblokuje a pokračuje v provádění.
Thread.join() může vyvolat InterruptedException, pokud je aktuální vlákno během čekání přerušeno. V takovém případě čekání skončí.
Příklad:
// Vytvoření a spuštění nového vlákna
Thread worker = new Thread(() -> {
try {
// Simulace práce
Thread.sleep(2000);
System.out.println("Pracovní vlákno dokončeno.");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
worker.start();
try {
// Hlavní vlákno čeká na dokončení pracovního vlákna
worker.join();
System.out.println("Hlavní vlákno pokračuje po dokončení pracovního.");
} catch (InterruptedException e) {
e.printStackTrace();
}
Důležité: join() synchronizuje provádění jednoho vlákna s ukončením jiného. To je užitečné, když chcete zajistit, že určitý úkol bude dokončen před pokračováním v jiném vlákně.