"Olá, amigo! Vejo que você está fazendo grandes progressos em aprender sobre threads."

"Afinal, não foi tão difícil."

Isso é ótimo! Hoje você tem uma lição fácil e o tópico é o método join .

Imagine a seguinte situação: a thread principal criou uma thread filha para realizar alguma tarefa. O tempo passa e agora o thread principal precisa dos resultados do trabalho executado pelo thread filho. Mas o thread filho ainda não terminou seu trabalho. O que o thread principal deve fazer?

Boa pergunta. O que o thread principal deve fazer?

"É para isso que serve o método join . Ele nos permite fazer um thread esperar enquanto outro thread termina seu trabalho:"

Código Descrição
class Printer implements Runnable
{
private String name;
public Printer(String name)
{
this.name = name;
}
public void run()
{
System.out.println("I’m " + this.name);
}
}
Classe que implementa a interface Runnable.
public static void main(String[] args)
{
Printer printer1 = new Printer("Nick");
Thread thread1 = new Thread(printer1);
thread1.start();

thread1.join();
}
A thread principal cria uma thread filha – thread1 .

Em seguida, ele o inicia chamando thread1 .start();

E então espera que seja concluído – thread1.join();

Um thread pode chamar o método join no objeto Thread de um segundo thread. Como resultado, o primeiro thread (que chamou o método) para seu trabalho até que o segundo thread (cujo método de junção do objeto foi chamado) seja concluído.

Precisamos distinguir entre duas coisas aqui: temos um thread (um ambiente de execução separado) e temos um objeto Thread.

"É isso?"

"Sim."

"Mas por que temos que criar um thread e esperar imediatamente que ele seja concluído?"

"Talvez não seja necessário imediatamente. Pode ser depois de algum tempo. Depois de iniciar seu primeiro thread filho, o thread principal pode atribuir muito mais tarefas a outros threads (criando-os e chamando o método start ). Então, quando ele não tem mais trabalho, ele precisa processar os resultados do primeiro thread filho. Sempre que você precisar esperar que outro thread termine de funcionar, você precisa chamar o método join ."

"Entendi."