Ola galera tenho uma dúvida.Estou fazendo alguns simulados pelos master exam e tem a seguinte questão:
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 :
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!!