¿Cómo manejar el siguiente programa para ejecutar Java lang ilegalmonitorstateexception?
1 gt; cuando el hilo actual no contiene el recurso de bloqueo del objeto actual, se llama al método obj.wait()
2 gt cuando Cuando el hilo actual no contiene el recurso de bloqueo del objeto actual, se llama al método obj.notify().
3 gtCuando el hilo actual no contiene el recurso de bloqueo del objeto actual, se llama al método obj.notifyAll().
Ahora mira tu código. El método make en la clase Hmaker utiliza bloques de código sincronizados. Agrega el bloque de código que eliminaste sincronizado(Ham.box){}, y el resultado de la operación es:
Chef A: Las hamburguesas están aquí (cinco en total).
Excepción en el hilo "a" Java .lang .illegalmonitorstateexception
en java.lang.Object.notify(método nativo)
en test .thread . maker . make(h maker . Java: 7)
en el hilo de prueba . h maker run(h maker . Java: 21)
Esto se debe a que no bloqueó. En este bloque de código, el hilo actual no contiene el recurso de bloqueo del objeto Ham.box, por lo que esta excepción se produce cuando se llama al método Ham.box.notify().
Del mismo modo, el resultado de ejecución que diste es que no agregaste un bloque de código de sincronización en el método de venta de la clase Hassistant. Los cambios específicos son los siguientes:
Public void sell()
{
if(ham output == 0)
{
System.out.println("Personal: Clientes y amigos, esperen un momento, ¡¡las hamburguesas se acabaron!!");
}
Sincronización (caja de jamón) {
Pruebe { caja de jamón . esperar();}
catch(excepción interrumpida e){ e . >ham . sales ;
System.out.println("Empleado: Hola cliente, las hamburguesas están aquí, (total * * * volumen de ventas: " ham . sales ");
}
}
Simplemente bloquee el objeto Ham.box. Esta excepción es realmente fácil de resolver. Solo arroja tres situaciones.
Espero. puedo darte algo de ayuda, gracias