Concepto detrás de poner métodos wait (), notify () en la clase Object [duplicar]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo se puede invocar los métodos wait () y notify () en objetos que no son hilos? 9 respuestas

Solo estoy teniendo dificultades para entender el concepto detrás de ponerwait() inObject clase. Por este motivo, considere siwait() ynotifyAll() están enThread clase

class Reader extends Thread {
    Calculator c;
    public Reader(Calculator calc) {
        c = calc;
    }

    public void run() {
        synchronized(c) {                              //line 9
        try {
            System.out.println("Waiting for calculation...");
            c.wait();
        } catch (InterruptedException e) {}
            System.out.println("Total is: " + c.total);
        }
    }

    public static void main(String [] args) {
        Calculator calculator = new Calculator();
        new Reader(calculator).start();
        new Reader(calculator).start();
        new Reader(calculator).start();
        calculator.start();
    }
}

class Calculator extends Thread {
    int total;
    public void run() {
        synchronized(this) {                     //Line 31
            for(int i=0;i<100;i++) {
                total += i;
            }
             notifyAll();
        }
    } 
}

Mi pregunta es ¿qué diferencia podría haber hecho? En la línea 9 estamos adquiriendo el bloqueo en el objeto c y luego realizamos una espera que satisface la condición de espera que necesitamos para adquirir el bloqueo en el objeto antes de usar la espera y así es el caso para notificar a todos Hemos adquirido el bloqueo en el objeto de la Calculadora en la línea 31 .

Respuestas a la pregunta(11)

Su respuesta a la pregunta