Pessoal, preciso de um help de vocês…estou com dúvida no seguinte código(esta questão eu retirei do livro da Kathy Sierra(pagina 419 - questão 2):
public class TestaThread extends Thread{
private String name;
public TestaThread(String name){
this.name = name;
}
public static void main(String[] args) {
new TestaThread("X").start();
new TestaThread("Y").start();
}
public void write(){
System.out.print(name);
System.out.print(name);
}
public void run(){
synchronized (TestaThread.class) {
write();
}
}
}
Como garantir que a saída seja XXYY ou YYXX?
Respostas:
E) public void run(){
synchronized(TestaThread.class){
write();
}
}
F) public void run(){
synchronized(System.out){
write();
}
}
=> eu não entendi pq o item E, usando synchronized(TestaThread.class), eu garanto que a saída será XXYY ou YYXX, pois, quando eu li sobre sincronização e bloqueios no livro, eu li que synchronized(Myclass.class) é usado para proteger métodos static, ou seja, métodos de classe.E o método em questão que está sendo protegido é o método run()…
Obrigado.
