Sobes.tech
Middle

Ako funguje metóda Thread.join()?

sobes.tech AI

Odpoveď od AI

Metóda Thread.join() spôsobí, že aktuálne bežiaci vlákno bude čakať na dokončenie vlákna, na ktoré bolo volané join.

Volaním otherThread.join() je aktuálne vlákno (napríklad main) zablokované, kým otherThread nedokončí svoju činnosť (jeho metóda run() sa nevráti).

Je možné špecifikovať časový limit v milisekundách alebo v milisekundách a nanosekundách:

  • otherThread.join(long millis): čaká maximálne millis milisekúnd.
  • otherThread.join(long millis, int nanos): čaká maximálne millis milisekúnd a nanos nanosekúnd.

Ak vyprší stanovený časový limit a vlákno ešte nie je ukončené, aktuálne vlákno sa odblokuje a pokračuje v vykonávaní.

Thread.join() môže vyvolať InterruptedException, ak je aktuálne vlákno počas čakania prerušené. V takom prípade sa čakanie ukončí.

Príklad:

// Vytvoríme a spustíme nové vlákno
Thread worker = new Thread(() -> {
    try {
        // Simulácia práce
        Thread.sleep(2000);
        System.out.println("Pracovné vlákno ukončené.");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

worker.start();

try {
    // Hlavné vlákno čaká na ukončenie pracovného vlákna
    worker.join();
    System.out.println("Hlavné vlákno pokračuje po ukončení pracovného.");
} catch (InterruptedException e) {
    e.printStackTrace();
}

Dôležité: join() synchronizuje vykonávanie jedného vlákna s ukončením iného. Je to užitočné, keď chcete zabezpečiť, že určitá úloha bude dokončená pred pokračovaním v inom vlákne.