[code]Given:
- public class Threads2 implements Runnable {
-
- public void run() {
- System.out.println(“run.”);
- throw new RuntimeException(“Problem”);
- }
- public static void main(String[] args) {
- Thread t = new Thread(new Threads2());
- t.start();
- System.out.println(“End of method.”);
- }
- }
Which two can be results? (Choose two.)
A. java.lang.RuntimeException: Problem
B. run.java.lang.RuntimeException: Problem
C. End of method. java.lang.RuntimeException: Problem
D. End of method.run.java.lang.RuntimeException: Problem
E. run.java.lang.RuntimeException: ProblemEnd of method.[/code]
Pessoal porque, quando o método run dispara a exception o main ainda exibe “End of method”? A aplicação nao era pra parar n?
Outra coisa executando esse codigo varias vezes ja saiu o seguinte resultado
[code]Exception in thread “Thread-0” java.lang.RuntimeException: Problem
at com.cast.C.run(C.java:9)
at java.lang.Thread.run(Unknown Source)
End of method.
run.[/code]
Como a JVM lançou a exception antes de exibir “run”?
Quem define a ordem de execução é o sistema operacional. Por isso, pode ser que a exception seja disparada antes ou depois de “End of method.”
Quando uma exception é disparada e não tratada, ela mata a thread que a disparou, as demais threads continuam rodando.
O programa só finaliza se essa for a única thread não-daemon da aplicação.
[quote=evertonsilvagomesjava]Outra coisa executando esse codigo varias vezes ja saiu o seguinte resultado
Exception in thread "Thread-0" java.lang.RuntimeException: Problem
at com.cast.C.run(C.java:9)
at java.lang.Thread.run(Unknown Source)
End of method.
run.
[/quote]
Isso não é possível. Você deve ter confundido a leitura do seu console.
O que pode ser é o seguinte. O java usa duas saídas. A System.err (que o NB imprime em vermelho) e a System.out.
O que você viu aí é só um delay na exibição de uma delas. Mas com certeza o comando do run rodou antes da exception.
Tente trocar System.out.println(“Run”); por System.err.println(“Run”) e ver se o problema se repete.
[quote=ViniGodoy]O que pode ser é o seguinte. O java usa duas saídas. A System.err (que o NB imprime em vermelho) e a System.out.
O que você viu aí é só um delay na exibição de uma delas. Mas com certeza o comando do run rodou antes da exception.
Tente trocar System.out.println(“Run”); por System.err.println(“Run”) e ver se o problema se repete.[/quote]
Pouts é verdade funcionou agora a exception não ficou com o delay, foi exibida abaixo de “run”. System.err diferencia-se de System.ou pq exibi em vermelho? So isso?
São duas saídas diferentes. Numa o processo cospe os erros, na outra o processo cospe a saída normal.
É útil, pois você pode logar o err num lugar separado do out.
No caso do netbeans, o console dele é quem pinta de vermelho e joga tudo no mesmo lugar. Quando vc roda pelo DOS, o prompt de comando joga as duas juntas. Mas há como redirecionar uma delas. Se eu não me engano basta fazer algo assim:
Esse 1> e 2> não são comandos da VM, mas do próprio prompt de comando.
Veja que a classe Process, que representa um processo externo disparado por sua aplicação java, também tem dois métodos. Um chamado getOutputStream() e outro getErrorStream(). Num desses streams sai o que foi colocado no System.out, no outro o que for colocado no System.err do processo disparado.
São duas saídas diferentes. Numa o processo cospe os erros, na outra o processo cospe a saída normal.
É útil, pois você pode logar o err num lugar separado do out.
No caso do netbeans, o console dele é quem pinta de vermelho e joga tudo no mesmo lugar. Quando vc roda pelo DOS, o prompt de comando joga as duas juntas. Mas há como redirecionar uma delas. Se eu não me engano basta fazer algo assim:
Esse 1> e 2> não são comandos da VM, mas do próprio prompt de comando.
Veja que a classe Process, que representa um processo externo disparado por sua aplicação java, também tem dois métodos. Um chamado getOutputStream() e outro getErrorStream(). Num desses streams sai o que foi colocado no System.out, no outro o que for colocado no System.err do processo disparado.[/quote]
Muito Bom!! Vlww Vini!!