considere el siguiente código: -¿Por qué el método de notificación debe estar dentro de un bloque sincronizado?
class CalculateSeries implements Runnable{
int total;
public void run(){
synchronized(this){ // *LINE 1*
for(int i = 1; i <= 10000; i++) {
total += i;
}
notify(); //Notify all the threads waiting on this instance of the class to wake up
}
}
}
Otra clase está esperando en una instancia de esta clase por conseguir el bloqueo en el interior de un bloque sincronizado. Pero si no guardo el código en el método de ejecución en un bloque sincronizado, entonces obtengo IllegalMonitorStateException
.
notify()
debe significar dar señal a todos los hilos en espera. Entonces, ¿por qué debería estar dentro del bloque sincronizado?
notificar no notifica todos los hilos en espera. Notifica ** un ** hilo esperando. –
@JBNizet Sí. Es verdad. notify notificará solo a uno de todos los hilos elegibles. – whitehat