Mais uma de Threads

8 respostas
marciorodr0
public class TestOne implements Runnable {
	public static void main(String[] args) throws Exception {
		Thread t = new Thread(new TestOne());
		t.start();
		System.out.print("Started");
		t.join();
		System.out.print("Complete");
	}

	public void run() {
		for (int i = 0; i < 4; i++) {
			System.out.print(i);
		}
	}
}

// A. Compilation fails.
// B. An exception is thrown at runtime.
// C. The code executes and prints ?StartedComplete?.
// D. The code executes and prints ?StartedComplete0123?.
// E. The code executes and prints ?Started0l23Complete?.
// Answer: E

Creio que a explicação seja esta:
Possível explicação: Starta o Thread, mas o main é mais rápido e printa ?Started? e chama o join(), este método faz com que o main aguarde este Thread t terminar, ou seja, seu método run finalizar, printando 0123, depois que ele finaliza main volta a executar e printa ?Complete?

Alguém acrescenta alguma coisa, isto está realmente correto??

[]'s

8 Respostas

A

Acho que não é uma boa pensar que main continua executando mais rápido.

Quando falamos em thread, a execução depende da plataforma em que está executando o código.

E se a saída é um dispositivo de I/O lento?

rafaelsantos1983

Acho que é como o Arnaldo falou, depende do SO, com isso essa questão teria mais de uma resposta.

celso.martins

Executei algumas vezes na minha máquina e a única diferença da resposta E foi 0123StartedComplete na primeira execução. Em todas as outras deu letra E. Como não existe essa opção, acho que só teria essa resposta mesmo.

A -> Não
B -> Não
C -> Não. Porque nunca teria passado pelo run
D -> Não. Devido a t.join();
E -> A resposta

Neste caso você está chamando o método (run - t.start) de outro objeto criado (t). E não o método do próprio objeto.

Abraços.

marciorodr0

É duro… Essas perguntas são muito sacanas rsrsr

LPJava

as questoes de threads nao sao sacanas nao, eles apenas testam o basico sobre, as sacanas sao fundamentos, O.O essas sim sao lenhas pegadinhas em minimos detalhes…

peerless

Nossa, acho bem o contrário. As que tive menos saco foram as de thread, principalmente pq sao as questões mais grandes da prova. (eh claro que qnd era erro de sintaxe/semantica ficava facil)

LPJava

hehe eu fiz uma tactica deixei para responder as de threads e drop por ultimo pq era as maiores… e tinha que analisar com mais detalhes como as questoes de threads nao correspondem nem 20% da prova entao taria tranquilo na minha apareceu 5 apenas… ao contrario das outras questoes como fundamentos, O.O que correspondem mais que 20% do exame.

marciorodr0

celso.martins, creio que você matou 100% a questão, são duas saídas possíveis, porém apenas uma delas está entre as alternativas… valeu!

Criado 24 de janeiro de 2009
Ultima resposta 25 de jan. de 2009
Respostas 8
Participantes 6