Esperar y notificar de Java: comprensión de IllegalMonitorStateException
En Java, los métodos de espera y notificación permiten que los subprocesos sincronicen su ejecución. Sin embargo, el uso incorrecto de estos métodos puede generar IllegalMonitorStateException.
Para entender por qué, analicemos el código proporcionado:
Main.java
Runner.java
El problema radica en la llamada wait() en Runner.run(). Cuando un hilo llama a wait() en un objeto, debe ser propietario del monitor de ese objeto. La propiedad se establece sincronizando el objeto.
Para solucionar el problema, sincronice en Main.main dentro de la llamada wait():
class Runner implements Runnable {
public void run() {
try {
synchronized (Main.main) {
Main.main.wait();
}
} catch (InterruptedException e) {}
System.out.println("Runner away!");
}
}
Esto garantiza que el hilo actual sea propietario del monitor Main.main antes de ingresar a la condición de espera().
El mismo principio se aplica a notify() y notifyAll(). Un hilo debe poseer el monitor del objeto antes de emitir estos métodos.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3