Sobes.tech
Middle

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ě millis milisekund.
  • otherThread.join(long millis, int nanos): čeká maximálně millis milisekund a nanos nanosekund.

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ě.