VademécumVademécum\IllegalMonitorStateException [excepción] java.lang…

IllegalMonitorStateException [excepción] java.lang…

Excepción que se lanza cuando se intenta hacer una operación propia de un monitor fuera de un monitor. En otras palabras, el thread debe poseer el cerrojo sobre el que intenta hacer una operación wait() o notify().

Para ejecutar wait() o notify() debemos estar dentro de un método o una zona sinchoronized, Podemos estar ejecutando el cuerpo del método, o podemos estar en otro código que se llama desde el cuerpo del método.

En métodos sincronizados, sólo podemos hacer wait() o notify() sobre el objeto que ejecuta el método

synchronized metodo() {

    ...

    this.wait();

    ...       

    this.notify();

    ...       

}

 

En zonas sincronizadas, sólo podemos hacer wait() o notify() sobre el cerrojo que controla la zona:

synchronized (cerrojo) {

    ...

    cerrojo.wait();

    ...       

    cerrojo.notify();

    ...       

}

 

principio
principio