Olá a todos,
Estou com mais uma dúvida. Segue o código:
class Reader extends Thread {
Calculator c;
public Reader(Calculator calc){
c = calc;
}
public void run(){
synchronized(c){
try{
System.out.println("Waiting for calculation...");
c.wait();
}catch(InterruptedException e){}
}
//aguarda a notificacao pra imprimir o resultado
System.out.println("Total is: "+c.total);
}
public static void main(String [] args){
Calculator calculator = new Calculator();
//chamo o run() q tem o método wait().
new Reader(calculator).start();
new Reader(calculator).start();
new Reader(calculator).start();
//chamo o run() que tem o método notifyAll();
calculator.start();
}
}
class Calculator extends Thread {
int total;
public void run(){
synchronized(this){
for (int i=0;i<100;i++){
total += i;
}
notifyAll(); //Notifica todos os que estão aguardando..
}
}
}
Ao executá-lo :
Waiting for calculation…
Waiting for calculation…
Waiting for calculation…
Total is: 4950
Total is: 4950
Total is: 4950
Se alterar o notifyAll(); para notify();
Também tenho o mesmo resultado:
Waiting for calculation…
Waiting for calculation…
Waiting for calculation…
Total is: 4950
Total is: 4950
Total is: 4950
O que eu não entendi é porque os outros dois threads continuaram sua execução, uma vez que notifiquei apenas um.
Se alguém puder ajudar… desde já agradeço…
Diego