Control de Threads

Te comento un poco mi proyecto:
Tengo que programar un simulador gráfico de procesos industriales. Cada proceso debe desplazar bolas de un cuadrado a otro sobre una cinta, pudiendo haber distintos procesos. Para cada proceso evidentemente utilizo un Thread
public class thProceso implements Runnable{
//Variables de la clase
Thread th1=new Thread(this);
th1.start();
//.........
}
Los Threads los tengo que detener en función de una variable "estado", y cuando detengo un proceso las bolas deben permanecer quietas sobre la cinta. Cuando vuelva a cambiar el estado a "marcha" las bolas deben de continuar desplazándose.
La pregunta es, ¿cómo puedo detener un thread y volver a reiniciarlo conservando los valores de las variables de thProceso?
Si necesitas más datos no dudes en consultármelos.

1 respuesta

Respuesta
1
Yo lo que haría sería lo siguiente:
1) Me crearía una clase que controle el movimiento de las bolas de una caja a otra. Llemémosla CintaTransportadora, que implemente el interfaz Runnable.
2) Dicha clase debe tener tres métodos : start(), pause(), stop(), que actualize una variable privada de la clase que almacene el estado (1->en ejecución, 2->pausa, 3->parado):
public static final int EN_EJECUCION = 1;
public static final int EN_PAUSA = 2;
public static final int PARADO = 3;
private int estado;
3) en el constructor de la clase mete este código para activar el hilo:
estado = EN_PAUSA;
Thread t = new Thread(this);
t.start();
3)Dentro del método run(), mete un bucle donde compruebe que el estado no es parado (lo que significaría que quieres terminar la ejecución del todo). Mientras el estado sea 1 o 2, mantente en el bucle.
4) Dentro del bucle pon un Thread. Sleep(100) para que el proceso se refresque cada 100 milisegundos (es un ejemplo, pon el tiempo que consideres oportuno para refrescar la cinta transportadora). Detrás, del sleep() (capturando el InterruptedException), comprueba el estado. Si es 1, actualiza la posición de las bolas. Si es 2, no hagas nada.
Bueno, si tienes más dudas, no te cortes en volver a preguntar lo que sea.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas