Pregunta

Me gustaría matar hilos que están atrapados en el estado de estancamiento. En primer lugar, podemos detectar ids de hilo en estado de interbloqueo utilizando el método findDeadlockedThreads() de la clase ThreadMXBean en java.lang.management.

A continuación, me gustaría matar a los hilos de rosca por IDS, y por lo tanto tengo dos preguntas relacionadas:
(1) ¿Cómo obtener el control de un hilo por el ID del tema?
(2) ¿Cómo matar a un hilo bloqueado? Creo que interrumpen invokting () método dará una excepción a la rosca y matará a la rosca.

¿Fue útil?

Solución

Desde el ThreadGroup raíz, se puede tener la clase de rosca enumerar todos los subprocesos que se ejecutan . A continuación, puede llamar Thread.stop en la que coincida con tu ID.

Una vez dicho esto, esto es muy peligroso debido al potencial de dejar objetos en un estado incoherente. No creo que el método de interrupción provocará un hilo para ser liberado hasta que se haya atascado en espera en un bloqueo de sincronización, por lo que el (mal) Parada de métodos

Vea también: " hilo de Java primitivo Deprecation ".

Otros consejos

El método java.util.concurrent.Lock.lockInterruptibly () es interrumpible, el bloqueo sincronizado mucho más común no lo es. Como se ha mencionado en la documentación, la capacidad de enumerar hilos estancadas pretende ser una ayuda depuración y no como un medio para recuperar en un entorno de producción.

En la producción es probable que sea más seguro para salir de todo el proceso y reiniciar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top