Dúvida Thread - notifyAll - K&B

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