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 .