publicclassTestOneimplementsRunnable{publicstaticvoidmain(String[]args)throwsException{Threadt=newThread(newTestOne());t.start();System.out.print("Started");t.join();System.out.print("Complete");}publicvoidrun(){for(inti=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??
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!