Tengo una aplicación Java que no termina. El método principal finaliza, pero los hilos permanecen activos y la aplicación no finaliza. El caso es que no parece haber ningún bloqueo/espera de monitor, por lo que no veo por qué no termina. Según Eclipse, me quedan dos hilos no Daemon. Uno está etiquetado [DestroyJavaVM] (parece esperanzador) y el otro parece estar bloqueado en Unsafe.park(boolean, long)
. ¿Cómo/dónde debería comenzar a investigar esto?¿Por dónde empiezo a investigar mi proceso de Java que no terminará?
El StackTrace abreviada del segundo hilo es:
Unsafe.park(boolean, long)
at LockSupport.park(Object)
at AbstractQueuedSynchronizer$ConditionObject.await()
at LinkedBlockingQueue<E>.take()
at ThreadPoolExecutor.getTask()
at ThreadPoolExecutor$Worker.run()
at Thread.run()
¿Cuál es el seguimiento de la pila completa del hilo en Unsafe.park()? –
Unsafe.park (booleano, largo) -> LockSupport.park (Object) -> AbstractQueuedSynchronizer $ ConditionObject.await() -> LinkedBlockingQueue .take() -> ThreadPoolExecutor.getTask() -> ThreadPoolExecutor $ Worker.run() -> Hilo.run() –
JenFallow
He editado su comentario en la pregunta porque es mucho más fácil de leer en un bloque de código, y porque forma una parte importante de la pregunta en sí. –