Duvida thread  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
soudaniel_01
JavaEvangelist

Membro desde: 11/04/2007 18:55:00
Mensagens: 429
Offline


Ola galera tenho uma dúvida.Estou fazendo alguns simulados pelos master exam e tem a seguinte questão:
view plaincopy to clipboardprint?

1. public class Main {
2. private static void say(String s){
3. System.out.println(s);
4. }
5.
6. public static void main(String[] args) {
7. // TODO code application logic here
8. Thread d=new Thread(){
9. public void run(){
10. say("1");say("2");say("3");
11. }
12. };
13. Thread d2=new Thread(){
14. public void run(){
15. say("a");say("b");say("c");
16. }
17. };
18. d.start();
19. d2.start();
20. }
21.
22. }

public class Main { private static void say(String s){ System.out.println(s); } public static void main(String[] args) { // TODO code application logic here Thread d=new Thread(){ public void run(){ say("1");say("2");say("3"); } }; Thread d2=new Thread(){ public void run(){ say("a");say("b");say("c"); } }; d.start(); d2.start(); } }

a) a1be23
b) abc123
c)12c3ab
d)1ab3c2
e)123abc
f)the code does not compile
g)an error eccurs on runtime


eu marquei (e) pois theads que chamam metodos static synchronized
de uma classe sempre bloquearão uns aos outros
mas no exame diz como resposta certa c d f g
Ai fiz un teste aqui e realmente imprime sempre na ordem 1 2 3 a b c
interessante é que mesmo deixando sem o synchonized o resultado é o mesmo
e mais interessante ainda é que se eu colocar um loop do tipo ate 100 para cada metodo run :
view plaincopy to clipboardprint?

1. public class Main {
2. private static void say(String s){
3. System.out.println(s);
4. }
5.
6. public static void main(String[] args) {
7. // TODO code application logic here
8. Thread d=new Thread(){
9. public void run(){
10. for(int i=0;i<100;i++)
11. say("1");
12. }
13. };
14. Thread d2=new Thread(){
15. public void run(){
16. for(int i=0;i<100;i++)
17. say("a");
18. }
19. };
20. d.start();
21. d2.start();
22. }
23.
24. }

public class Main { private static void say(String s){ System.out.println(s); } public static void main(String[] args) { // TODO code application logic here Thread d=new Thread(){ public void run(){ for(int i=0;i<100;i++) say("1"); } }; Thread d2=new Thread(){ public void run(){ for(int i=0;i<100;i++) say("a"); } }; d.start(); d2.start(); } }

realmente neste caso nao garante mais o bloqueio ,temos alternancias
alguém sabe o pq?e pq a resposta que marquei esta errada e pq o certo é
C D F G??????
valeu galera!!
javadev
JavaChild

Membro desde: 02/09/2007 18:53:15
Mensagens: 112
Offline

Olá soudaniel_01,

não analisei o código, mas dá pra dizer com certeza que a resposta do simulado está errada. A letra f diz que o código não compila e a letra g diz que ocorre um erro em tempo de execução, isso é impossível! Concorda? Uma opção exclui a possibilidade de a outra estar correta.
fabioEM
GUJ Master
[Avatar]
Membro desde: 13/09/2007 13:34:23
Mensagens: 1041
Offline

javadev wrote:Olá soudaniel_01,

não analisei o código, mas dá pra dizer com certeza que a resposta do simulado está errada. A letra f diz que o código não compila e a letra g diz que ocorre um erro em tempo de execução, isso é impossível! Concorda? Uma opção exclui a possibilidade de a outra estar correta.



justamente essa é a minha duvida tambem acho que esta errada!Queria saber se este simulado é confiavel????

"Um pouco de ciência nos afasta de Deus. Muito, nos aproxima." (Louis Pasteur)
Conheçam Sócrates: http://www.youtube.com/watch?v=SlJSF-V6yBA
Conheçam a obra social Célio Lemos: http://www.oscl.org.br/site/
Conheçam o Projeto: http://www.youtube.com/watch?v=9-k818tfG6M&feature=youtu.be
Sun Certified Java Programmer 1.5
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team