D. End of method.run.java.lang.RuntimeException: Problem
E. run.java.lang.RuntimeException: Problem End of method.
Não entendi o porque de ainda sair End of method.
publicclassThreads2implementsRunnable{publicvoidrun(){System.out.println("run.");thrownewRuntimeException("Problem");}publicstaticvoidmain(String[]args){Threadt=newThread(newThreads2());t.start();System.out.println("End of method.");}}
você iniciar a thread não impede a execução do main…
quando você da o start em uma outra thread, a thread onde você executou o start continua executando… não é aguardado o fim do run para seguir a thread onde você deu o start…
pense assim, o método main esta em uma thread, pensa nele como uma linha crescendo para frente. Quando você da o start, ele apenas cria uma segunda linha paralela a ela, após isso, ambas seguem crescendo pra frente em paralelo, sem que uma aguarde a outra para crescer (a menos que você force isso). O start apenas cria a segunda linha, não aguarda que ela termine seu crescimento para voltar a crescer a linha atual.
ViniGodoy
Uma exceção não capturada só mata a thread onde ela foi disparada. Como vc disparou a exception por uma segunda thread, a main thread segue a execução e escreve “end of main” normalmente.
Só cuidado ao usar o System.out e o System.err. As exceptions são impressas no System.err. Então, talvez você observe alguns comportamentos estranhos, que não deveriam acontecer em threads, por causa do atraso que existe entre os dois outputstreams, como ocorreu nesse tópico do Everton.
Gustavo_Santos
blz, vlw !!
Quando a java.lang.RuntimeException for disparada, o segundo Thread morre correto ?!
Morre pelo fato de que não houve tratamento ?! E se o main ainda tivesse mais o que executar
continuaria sem problemas ?!
ViniGodoy
Continuaria. Quem morreu foi o segundo thread, não o main thread.