Estoy llamando a dos hilos de un hilo principal, llámalos hilo 1 e hilo 2. Cuando hilo 1 se detiene, quiero detener o matar el hilo 2 también. ¿Cómo puedo hacer esto? Hay un cambio en la producción real de lo que quiero. Es decir, hay una clase principal que también es thread.From clase principal estoy llamando thread1 y thread2. Estoy dando una entrada a thread1 desde la clase principal pero cuando esta entrada se está cambiando, quiero matar el hilo en ejecución1 y comenzarlo de nuevo con otra entrada. El segundo hilo, thread2 se ejecutará con la salida dada por el hilo1.Así que, cuando el primer hilo muera, el segundo se ejecutará pero dará un resultado solo si hay una entrada para ese hilo.¿Cómo puedo matar un hilo de otro hilo en Java?
Respuesta
Java ha desaprobado métodos para matar explícitamente otro hilo (como Thread.stop/Thread.destroy). La forma correcta es asegurarse de que las operaciones en el otro subproceso puedan soportar que se les diga que se detengan (por ejemplo, esperan una InterruptedException, lo que significa que puede llamar a Thread.interrupt() para detenerla).
Puede que también esté interesado en configurar el segundo hilo como daemon thread, lo que significa que en caso de que todos los otros hilos en la máquina virtual hayan finalizado, el proceso finalizará.
Según these instructions, lo mejor es utilizar variables bandera para decirle al otro hilo para detener su trabajo limpiamente.
Ver this Java Specialist article sobre la manera de apagar hilos limpiamente.
En pocas palabras, el artículo recomienda Thread.interrupt()
más el manejo apropiado de InterruptedException
en el código de la secuencia. Esa es una discusión interesante en sí misma, y es algo que rara vez veo hecho correctamente.
Ese artículo es una gran lectura y recomendable para cualquiera que no tenga tiempo suficiente para leer Programación Concurrente de Doug Lea en Java – abyx
En el método run()
de su hilo, marque un atributo que se establece a través de un método de acceso como shutdown()
cuando desea detener el hilo, use ese valor para finalizar el ciclo while. Por ejemplo:
boolean stopping = false;
Thread currentThread = null;
public void run() {
currentThread = Thread.currentThread();
while (!isStopping()) {
// do something, sleep a while
}
}
public synchronized void shutdown() {
stopping = true;
currentThread.notifyAll();
}
public synchronized boolean isStopping() {
return stopping;
}
el código tiene una condición de carrera y su uso de la sincronización es pobre. Es mucho mejor simplemente verificar el estado interrumpido del hilo actual o si DEBES utilizar algún tipo de centinela, al menos hacerlo atómico. – Kevin
@Kevin, debe haber perdido el * Por ejemplo * bit, este código, obviamente, solo pretende mostrar la estructura de una solución, no para ser utilizado tal como está. – rsp
@rsp: si publica ejemplos, preferiblemente hágales buenos ejemplos. Si las personas ya supieran distinguir los ejemplos buenos de los malos, no tendrían que preguntar aquí. –
- 1. Cómo puedo matar un hilo en python
- 2. Cómo matar un hilo C#?
- 3. ¿Cómo matar un hilo MFC?
- 4. Cómo matar un hilo en delphi?
- 5. ¿Cómo matar un hilo instantáneamente en C#?
- 6. ¿Puedo ejecutar un hilo dentro de un hilo en java?
- 7. Interrumpir/matar a un hilo en ejecución
- 8. cómo matar el hilo php de fondo?
- 9. cómo ejecutar un hilo después de completar otro hilo
- 10. ¿Cómo puedo depurar un hilo Java colgante?
- 11. ¿Cómo esperar a que termine un hilo antes de que comience otro hilo en Java/Android?
- 12. En Java, si un hilo se mata, ¿qué pasará con el otro hilo?
- 13. matando un hilo en ejecución en java?
- 14. Cómo matar el hilo al salir?
- 15. ¿Es posible matar el hilo de BackgroundWorker?
- 16. Java: ¿cómo atrapo InterruptedException en un hilo, cuando es interrumpido por otro hilo?
- 17. ventana de Creación en otro hilo (no hilo principal)
- 18. Método de ejecución en el hilo principal de otro hilo
- 19. Cómo pasar objeto a partir de hilo conductor a otro hilo en Java
- 20. Código de ejecución en el hilo principal de otro hilo
- 21. ¿Escribir en un TextBox desde otro hilo?
- 22. Ejecutar un control WPF en otro hilo
- 23. cómo matar un hilo que está esperando una llamada de función de bloqueo en Java?
- 24. Bloquear en un hilo, soltando en otro
- 25. Ejecuta MBProgressHUD en otro hilo?
- 26. ¿Cómo depurar la excepción en otro hilo?
- 27. Cómo actualizar SWT GUI desde otro hilo en Java
- 28. Obtener un rastreo de otro hilo
- 29. ¿Cómo reutilizar un hilo en Java?
- 30. ¿Devolviendo objetos de otro hilo?
Muchas gracias por la sugerencia, pero puede ayudarme a especificarla correctamente. – Raji