Thread - Execução do run()

5 respostas
AdrianoRibeiro

Boa tarde senhores, podem me ajudar no entendimento desta questão?

public class TestClass extends Thread { public void run() { for(;;); } public static void main(String args[]) { System.out.println("Starting Main"); new TestClass().start(); System.out.println("Main returns"); } }
A saída do código acima será:
Starting Main
Main returns
*Depois disso o loop infinito.

Mas eu esperava que a saída fosse somente “Starting Main” e depois ficaria rodando o for do loop infinito, sendo assim nunca seria impresso o “Main returns”.

Qual a explicação?

Obrigado pela atenção.

5 Respostas

A

Poderias colocar após o start() o join(). Isso faria com q a Thread principal espera pela thread auxiliar. então ela ( A principal) esperaria infinitamente , pois a thread auxiliar nunca terminaria. Tem outras opções tamb como o wait() e notify() mas terias q modificar algumas coisas e acho q não é o caso .

AdrianoRibeiro

Ok, posso considerar como explicação então que após o start a thread corrente dá lugar a outra, neste caso a thread main. Correto?

A
Não necessariamente isso dependerá da implementação do SO para a JVM. Isso que vc falou  é garantido com o join() .

no caso seria :

Thread t1 = new TestClass();

t1.start();

t1.join();
ViniGodoy

A explicação é justamente o fato de existirem duas threads rodando. Ou seja, é como se seu programa fosse dividido agora em 2 execuções simultâneas.
Uma continua rodando o main. A outra fica travada no loop infinito.

AdrianoRibeiro

Isso, matou minha dúvida, obrigado.

Criado 22 de dezembro de 2012
Ultima resposta 23 de dez. de 2012
Respostas 5
Participantes 3