Sobes.tech
Middle

Как работи методът Thread.join()?

sobes.tech AI

Отговор от AI

Методът Thread.join() кара текущия изпълняващ се поток да чака завършването на потока, върху който е извикан join.

Когато извикате otherThread.join(), текущият поток (например, main) се блокира, докато otherThread не завърши изпълнението си (методът run() му се върне).

Може да зададете таймаут в милисекунди или в милисекунди и наносекунди:

  • otherThread.join(long millis): чака максимум millis милисекунди.
  • otherThread.join(long millis, int nanos): чака максимум millis милисекунди и nanos наносекунди.

Ако изтече зададеният таймаут и потокът все още не е завършил, текущият поток се отключва и продължава изпълнението си.

Thread.join() може да хвърли InterruptedException, ако текущият поток бъде прекъснат по време на очакването. В такъв случай, очакването се прекратява.

Пример:

// Създаваме и стартираме нов поток
Thread worker = new Thread(() -> {
    try {
        // Имитиране на работа
        Thread.sleep(2000);
        System.out.println("Работният поток приключи.");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

worker.start();

try {
    // Основният поток чака да приключи работният поток
    worker.join();
    System.out.println("Основният поток продължава след приключване на работния.");
} catch (InterruptedException e) {
    e.printStackTrace();
}

Важно: join() синхронизира изпълнението на един поток с приключването на друг. Това е полезно, когато трябва да гарантирате, че дадена задача е завършена, преди да продължите в друг поток.