2
respostas

[Dúvida] - Threads 2: Programação concorrente avançada - Aula 3

No exercício "Juntando threads", temos a seguinte pergunta:

"O que podemos afirmar sobre o método join() da classe Thread?"

A resposta é a opção B e D como corretas, onde ao respondermos temos a seguinte explicação para o tópico D que é :

D) Correto: Quando uma thread t2 chama t1.join(), significa que t2 vai esperar t1 finalizar.

t2 vai se "juntar" ao t1, isso é esperar a finalização do t1.

A minha dúvida é no trecho "Quando uma thread t2 chama t1.join()". Como assim? Não é a thread t2 que chama o join() para aguardar t1 terminar? Tipo, t2.join() ao ser executado aguarda o t1 terminar para aí prosseguir?

2 respostas

Oi Daniel, join é um método de instância, logo vc executa ele na thread específica... t1.join() implica em esperar t1 acabar antes do fluxo continuar.. então se a thread 2 chamada t1.join(), naquele ponto, ele parou para aguardar a execução completa de t1.

Alberto, obrigadão pelo retorno!

Então, é justamente nesse ponto que você falou que estou confuso:

então se a thread 2 chamada t1.join()

Assim:

final Thread t1 = new Thread(runnableImpl1);
final Thread t2 = new Thread(runnableImpl2);

t1.start();
t2.start();
t1.join();

Da forma acima, o processo só prossegue quando aguardamos o t2 terminar correto, ou seja, o t1 executa e para, e o processo como um todo só continua quando t2terminar, certo?

O que me confundiu é dizer que t2 chamou t1.join(). Como assim?