Duvida Thread

10 respostas
Nykolas_Lima

Estava fazendo o TestKiller e nessa seguinte questão não entendi o porque da resposta.

public class Thread2 implements Runnable {
public void run() {
		System.out.println("run.");
		throw new RuntimeException("Problem");
		}
	public static void main(String[] args) {
		Thread t = new Thread(new Thread2());
		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: Problem
End of method.

A resposta é D e E.

Alguem poderia explicar a o porque da resposta?

Obrigado

10 Respostas

S

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?

abs

gustavobs

caí bastante… mas nao sao cabeludas…

Nykolas_Lima

edited

Nykolas_Lima
Click the Exhibit button.
1. import java.util.*;
2.
3. public class NameList {
4. private List names = new ArrayList();
5. public synchronized void add(String name) { names.add(name); }
6. public synchronized void printAll() {
7. for (int i = 0; i <names.size(); i++) {
8. System.out.print(names.get(i) +? ?);
9. }
10. }
11. public static void main(String[] args) {
12. final NameList sl = new NameList();
13.for(int i=0;i<2;i++) {
14. new Thread() {
15. public void ruin() {
16. sl.add(?A?);
17. sl.add(?B?);
18. sl.add(?C?);
19. sl.printAll();
20. }
21. }.start();
22. }
23. }
24. }
Which two statements are true if this class is compiled and run?
(Choose two.)
A. An exception may be thrown at runtime.
B. The code may run with no output, without exiting.
C. The code may run with no output, exiting normally.
D. The code may rum with output ?A B A B C C ?, then exit.
E. The code may rum with output ?A B C A B C A B C ?, then exit.
F. The code may ruin with output ?A A A B C A B C C ?, then exit.
G. The code may ruin with output ?A B C A A B C A B C ?, then exit.
Answer: EG

Eu entendi pq a E, mas porque a G está correta?

MaiqueL

Frango:

Eu entendi pq a E, mas porque a G está correta?

Bom vou tentar responder.

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.

Isso pq o método run não é sincronizado.

Criado 12 de março de 2009
Ultima resposta 12 de mar. de 2009
Respostas 10
Participantes 5