Sobes.tech
Middle

Kaip veikia metodas Thread.join()?

sobes.tech AI

Atsakymas iš AI

Metodas Thread.join() verčia šiuo metu vykdomą srautą laukti, kol baigsis join iškviestas srautas.

Kviečiant otherThread.join(), dabartinis srautas (pavyzdžiui, main) yra užblokuotas, kol otherThread nebaigs savo vykdymo (jo run() metodas grąžins valdymą).

Galite nurodyti laukimo laiką milisekundėmis arba milisekundėmis ir nanosekundėmis:

  • otherThread.join(long millis): laukia ne ilgiau kaip millis milisekundžių.
  • otherThread.join(long millis, int nanos): laukia ne ilgiau kaip millis milisekundžių ir nanos nanosekundžių.

Jei nurodytas laiko limitas pasibaigia ir srautas dar nebaigtas, dabartinis srautas atlaisvinamas ir tęsia vykdymą.

Thread.join() gali išmesti InterruptedException, jei dabartinis srautas yra nutrauktas laukimo metu. Tokiu atveju laukimas nutraukiamas.

Pavyzdys:

// Sukuriame ir paleidžiame naują srautą
Thread worker = new Thread(() -> {
    try {
        // Darbo imitacija
        Thread.sleep(2000);
        System.out.println("Darbinis srautas baigėsi.");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

worker.start();

try {
    // Pagrindinis srautas laukia, kol baigsis darbinis srautas
    worker.join();
    System.out.println("Pagrindinis srautas tęsiasi po darbinio pabaigos.");
} catch (InterruptedException e) {
    e.printStackTrace();
}

Svarbu: join() sinchronizuoja vieno srauto vykdymą su kito užbaigimu. Tai naudinga, kai norite užtikrinti, kad tam tikras uždavinys bus baigtas prieš tęsiant darbą kitame sraute.