Sobes.tech
Middle

Cum funcționează metoda Thread.join()?

sobes.tech AI

Răspuns de la AI

Metoda Thread.join() face ca thread-ul curent în execuție să aștepte finalizarea thread-ului pe care a fost apelat join.

Apelând otherThread.join(), thread-ul curent (de exemplu, thread-ul main) este blocat până când otherThread își încheie execuția (metoda sa run() returnează controlul).

Se poate specifica un timeout în milisecunde sau în milisecunde și nanosecunde:

  • otherThread.join(long millis): așteaptă maximum millis milisecunde.
  • otherThread.join(long millis, int nanos): așteaptă maximum millis milisecunde și nanos nanosecunde.

Dacă timpul de așteptare specificat expiră și thread-ul nu s-a încheiat încă, thread-ul curent va fi deblocat și va continua execuția.

Thread.join() poate arunca o InterruptedException dacă thread-ul curent este întrerupt în timpul așteptării. În acest caz, așteptarea se întrerupe.

Exemplu:

// Creăm și pornim un nou thread
Thread worker = new Thread(() -> {
    try {
        // Simulare de muncă
        Thread.sleep(2000);
        System.out.println("Thread-ul worker s-a terminat.");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

worker.start();

try {
    // Thread-ul principal așteaptă finalizarea thread-ului worker
    worker.join();
    System.out.println("Thread-ul principal continuă după ce worker-ul s-a terminat.");
} catch (InterruptedException e) {
    e.printStackTrace();
}

Important: join() sincronizează execuția unui thread cu finalizarea altuia. Acest lucru este util atunci când trebuie să garantăm că o anumită sarcină a fost finalizată înainte de a continua execuția în alt thread.