Estava fazendo o TestKiller e nessa seguinte questão não entendi o porque da resposta.
publicclassThread2implementsRunnable{publicvoidrun(){System.out.println("run.");thrownewRuntimeException("Problem");}publicstaticvoidmain(String[]args){Threadt=newThread(newThread2());t.start();System.out.println("End of method.");}}
Então, nesta questão o que acontece é que o main é uma thread e Thread2 outra, como você não pode garantir qual rodará primeiro, então ambas as execuções são possíveis, tanto que o main conclua, quanto a Thread2. Entendeu?
gustavobs
Simples… são 2 threads rodando, uma delas é lançada uma exception, mas a outra termina normalmente.
Nykolas_Lima
mas quando lança a exception só a thread q lancou a excpetion para de rodar?
a exception nao faz a thread main parar tbm?
gustavobs
não, cada thread é um processo individual.
taaqui
São 2 Threads rodando, não esquece que main é o Thread principal e o Thread2 implementa runnable e sobrescreve run(), assim criando outra Thread e você ja sabe que os Threads não tem ordem certa de execução, então o Thread main pode rodar primeiro que o Thread Thread2 assim como o inverso pode acontecer.
Exemplo: Na linha 8 ele da start no Thread Thread2 assim iniciando o método run(), mais na ordem aleatoria você não sabe quando vai imprimir (“End of method.”), eles estão lutando por superioridade ja que são 2 threads distintos podem começar imprimindo tanto o Thread 1 ou Thead 2, por isso as 2 respostas.
public class Thread2 implements Runnable { //Thread 1
public void run() {
System.out.println("run.");
throw new RuntimeException("Problem");
}
public static void main(String[] args) { // Thread 2
Thread t = new Thread(new Thread2());
t.start();
System.out.println("End of method.");
}
}
Nykolas_Lima
entendi
valeu pela explicação todos
só uma outra duvida, na prova cai mts sobre threads?
Tente imaginar que a primeira Thread adicionou ABC e teve tempo de imprimir até a letra B, Antes de imprimir a letra C uma outra Thread adicionou ABC e teve tempo de imprimir
até a letra C, então teriamos ABABCC.
Basicamente é isso que este código executa, ele não garante que a Thread consiga imprimir todas as letras após serem adicionadas, sem que uma outra Tread passe a sua frente.