Problemas con HILOS en Java

Iniciado por Skeletron, 10 Septiembre 2009, 23:12 PM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

Hola chicos...
Resulta que tengo 3 objetos DOCTOR, que iteran un arraylist buscando turnos que sean de ellos... no lo borran ni hacen nada.. simplemente iteran "mirando"...

Todo bien hasta ahí...
PERO
Para detenerlos, tenemos lo sigueinte:
dentro de RUN tenemos un WHILE(CONTINUAR && ITERADOR.hasnext)
o sea.. mientras que CONTINUAR sea tru y haya proximo, sigue el Bucle...
Para detener los hilos, llamamos a un metodo del objeto que cambia el valor de COntinuar a FALSE..
Para que no haga el while, y termine el metodo RUN..

Ok........!!!
Perfecttooo!!!!

Pero ahora quiero que el hilo COMIENCE DE NUEVO!!!!!
Le doy Doctor.Start()

Y ME DA UN PUTISIMO ERRORRR!!!!!!!!!!!!!!!!!!!!!!

run:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
        at java.lang.Thread.start(Thread.java:595)
        at GUI.GUIPrincipal.ComenzarActionPerformed(GUIPrincipal.java:184)
        at GUI.GUIPrincipal.access$000(GUIPrincipal.java:7)
        at GUI.GUIPrincipal$1.actionPerformed(GUIPrincipal.java:53)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

egyware

No se porque pero solo puedes hacer una sola vez llamar start. Por lo menos una vez lo intente si quieres qu se repita puedes hacer que el hilo siga funcionando pero durmiendo.
No se mucho sobre sincronizacion de hilos, pero usa la clase Semaphore que esta en java.util.concurrence  si no me equivoco.
Adios.