Cómo reanudar un hilo
Frecuentes
Visto 154 veces
2
Estoy usando tres subprocesos en mi código. Cuando presiono el botón 'detener', debería detenerse y el botón 'iniciar' debería reanudarlos ... aquí está mi código:
private void jButton_stopActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
boolean result = value;
if(result){
t.stop();
timer.stop();
timer2.stop();
value = false;
jButton_stop.setText("Start");
}
else{
t.resume();
timer.resume();
timer2.resume();
value = true;
jButton_stop.setText("Stop");
}
Pero cuando hago clic en el botón 'detener', todos los hilos se detienen perfectamente, pero cuando presiono el botón 'iniciar', los hilos no se reanudan. ¿Por qué? por favor, ayúdame.
2 Respuestas
4
Considerando t
es una instancia de Thread
:
Nunca es legal iniciar un hilo más de una vez. En particular, un subproceso no puede reiniciarse una vez que ha completado la ejecución.
de http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
Y, Thread.stop()
es obsoleto.
El subproceso mismo debe comprobar si necesita terminar, como un boolean run
variable que se está comprobando, o usando objetos para la comunicación de subprocesos.
Respondido el 10 de Septiembre de 13 a las 01:09
1
Puede mantenerlo en espera en función de algún valor booleano, por ejemplo:
public void run() {
try {
for(int i = 15; i > 0; i--) {
System.out.println(name + ": " + i);
Thread.sleep(200);
synchronized(this) {
while(suspendFlag) {
wait();
}
}
}
} catch (InterruptedException e) {
System.out.println(name + " interrupted.");
}
System.out.println(name + " exiting.");
}
Aquí puede cambiar el estado de suspendFlag fuera del hilo. ver aquí
Respondido el 10 de Septiembre de 13 a las 01:09
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java multithreading or haz tu propia pregunta.
¿A qué te refieres con "hilo"? No veo ningún código de subproceso allí. ¿Te refieres en cambio a un temporizador de oscilación? Supongo que nunca llamarías
stop()
yresume()
en un Hilo. - Hovercraft Full Of Eelsthread.stop()
yresume()
están en desuso y no deben utilizarse. Deberías considerar tener el hilowait()
en una cerraduraObject
y entoncesnotify()
para que siga funcionando. - Gray¿Dónde está la definición de
timer
ytimer2
? - OscarGel dual de
Thread#resume()
isThread#suspend()
no,Thread#stop()
. Pero también lea el Javadoc paraThread#suspend()
, ya que será casi imposible hacer que esto funcione sin un punto muerto en un programa que no esté libre de bloqueos. Si publicas el código delrun()
método que utiliza el subproceso, estoy seguro de que la gente puede sugerir una posible reestructuración para que las cosas funcionen con sensatez. - clstrfsck