Escribo a ver si alguien me puede ayudar con mi problema.
Primero les explico lo que estoy tratando de hacer, en el contexto spring tengo un bean el cual tiene un método init que inicializa un Thread y lo guarda en un variable static de la misma clase, este método init se llama solamente una vez cuando se ha terminado de arrancar el contexto, este mismo método init cuando se llama también hace un start del Thread, pinta un mensaje en la consola y luego lo paro con un wait hasta aquí todo bien.
Ahora lo que quiero hacer es desde cualquier parte del código conseguir ese bean que contiene el Thread previamente arrancado y darle un notify, pero me salta un error, adjunto el código y el error:
BEAN del contexto:
Código Java:
Ver original
public class ConfirmacionesControllerBean implements ConfirmacionesController { public void init(){ confimacionesThread = createThread(); } public void run() { while(true){ try { wait(); e.printStackTrace(); } } } }; confirma.start(); return confirma; } public void wakeThread(){ confimacionesThread.notify(); } }
LLAMADAS A ESE BEAN:
getThreadConfirmaciones().init(); // esta OK, pinta la frase en la consola
getThreadConfirmaciones().wakeThread(); // esta es la que tiene ERROR
SALIDA CONSOLA:
Tarea procesada
Exception in thread "main" java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at com.ak.aitor.core.confirmaciones.ConfirmacionesCon trollerBean.wakeThread(ConfirmacionesControllerBea n.java:34)
at com.ak.aitor.sca.launch.LaunchServices.main(Launch Services.java:69)
Exception in thread "Thread-1" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:503)
at com.ak.aitor.core.confirmaciones.ConfirmacionesCon trollerBean$1.run(ConfirmacionesControllerBean.jav a:22)
Muchas gracias por vuestro tiempo,
Un saludo!