Cuando se produce un estancamiento quiero interrumpir el hilo de bloqueo ...
Usted podría implementar una tarea periódica para comprobar si hay puntos muertos (donde los puntos muertos son java intrínseco o Lock
con base) y la llamada interrupt
en todos los hilos implicados en el escenario. Sin embargo, esto no tiene garantías de que resolverá su problema. Es probable que el escenario vuelva a suceder. Vea Dr Heinz's article on a deadlock detector para más detalles.
De hecho, no hay garantía de que interrupt
libere incluso un proceso bloqueado como este. Es un enfoque mucho mejor para evitar el escenario de interbloqueo en primer lugar, por ejemplo, mediante el uso de bloqueos con tiempos de espera y estrategias de reintento o enfoques 'probar antes de comprar'.
y quiero registrar el seguimiento de la pila de este hilo ...
Si quieres hacer esto mediante programación, una vez más, seguir el ejemplo del Dr. Heinz. Si no, solo genera el volcado de hilo cuando hayas detectado el problema.
¿Hay alguna manera de cómo podemos encontrar el rastro de pila de un hilo fuera de ese hilo en Java?
Sí y no. Puede volcar los subprocesos de otras máquinas virtuales, pero sus seguimientos de pila pueden no ser tan útiles como podría pensar para determinar las causas de su interbloqueo. Si se ha detectado un punto muerto genuino (por la propia JVM en el volcado de subprocesos de su VM de aplicaciones), debe tener todo lo que necesita para depurar la causa (más o menos).
¿Quiere decir que quiere detectar un punto muerto y recuperarse? Nunca he hecho eso, pero usar un seguimiento de la pila no me parece el correcto ... –
Necesito el seguimiento de la pila para saber dónde quedó el hilo y puedo solucionar el problema para que la aplicación funcione bien después reiniciar. Sin embargo, quiero interrumpir el hilo de bloqueo para que la aplicación funcione hasta que encuentre algo de tiempo para solucionar el problema y liberarlo. – Palo