Sobes.tech
Middle

Como funciona o método Thread.join()?

sobes.tech IA

Resposta da IA

O método Thread.join() faz com que o thread atual aguarde até que o thread no qual join foi chamado termine.

Ao chamar otherThread.join(), o thread atual (por exemplo, o thread main) fica bloqueado até que otherThread conclua a sua execução (o método run() dele retorna o controlo).

Pode especificar um tempo limite em milissegundos ou em milissegundos e nanosegundos:

  • otherThread.join(long millis): espera no máximo millis milissegundos.
  • otherThread.join(long millis, int nanos): espera no máximo millis milissegundos e nanos nanosegundos.

Se o tempo limite especificado expirar e o thread ainda não tiver terminado, o thread atual é desbloqueado e continua a execução.

Thread.join() pode lançar uma InterruptedException se o thread atual for interrompido durante a espera. Nesse caso, a espera termina.

Exemplo:

// Criar e iniciar um novo thread
Thread worker = new Thread(() -> {
    try {
        // Simulação de trabalho
        Thread.sleep(2000);
        System.out.println("Thread worker terminou.");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
});

worker.start();

try {
    // O thread principal espera a conclusão do thread worker
    worker.join();
    System.out.println("O thread principal continua após o worker terminar.");
} catch (InterruptedException e) {
    e.printStackTrace();
}

Importante: join() sincroniza a execução de um thread com a conclusão de outro. Isto é útil quando precisa garantir que uma tarefa específica seja concluída antes de continuar a execução noutro thread.