PessoALL, estava estudando numa questao do simulador SyBex:
[IMG]http://img.photobucket.com/albums/v178/c0m4nch3/thread.jpg[/IMG]
CODE BOX:
class Classy {
synchronized void notStaticMethod(){
for (long n=0 ; n<1000000000L ; n++){
System.out.println(n);
}
}
static synchronized void StaticMethod(){
for (long n=0 ; n<1000000000L ; n++){
System.out.println(n);
}
}
}
Então, resolvi testar este problema no eclipse implementado os codigos a seguir:
class Classy extends Thread{
synchronized void notStaticMethod(){ // Sem estatico, eh sincronizado com apenas objeto
for (long n=0 ; n<10L ; n++){
System.out.println(n + Thread.currentThread().getName());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static synchronized void StaticMethod(){ // Com estatico, eh sincronizado com classe Classy
for (long n=0 ; n<10L ; n++){
System.out.println(n + Thread.currentThread().getName());
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Questao30 extends Thread{
Classy classy1 = new Classy();
Classy classy2 = new Classy();
public static void main (String args[]){
Questao30 a = new Questao30();
Questao30 b = new Questao30();
a.setName("A");
b.setName("B");
a.start();
b.start();
}
public void run(){
if(Thread.currentThread().getName().equals("A")){
classy1.notStaticMethod();
}
if(Thread.currentThread().getName().equals("B")){
classy1.notStaticMethod();
}
}
}
Então, segundo do SyBex, as respostas corretas sao A, B e D. Mas fiz teste assim:
* Thread A executando classy1.notStaticMethod() e Thread B executando classy1.notStaticMethod()
e o Eclipse executou e nao estao sincronizados!!!