끝내지 않은 Java 응용 프로그램이 있습니다. main 메서드는 끝나지 만 스레드는 활성 상태로 유지되고 응용 프로그램은 종료되지 않습니다. 문제는 모니터 잠금/대기가 나타나지 않아 종료되지 않는 이유를 알 수 없습니다. 이클립스에 따르면, 나는 2 개의 비 데몬 스레드가 남아있다. 하나는 [DestroyJavaVM]이라고 표시되어 있습니다 (희망이있는 것처럼 보입니다). 다른 하나는 Unsafe.park(boolean, long)
에서 차단 된 것 같습니다. 어떻게/어디서 조사해야합니까?끝내지 않을 Java 프로세스를 조사하려면 어디에서 시작해야합니까?
두 번째 스레드의 축소 된 스택 트레이스는 다음과 같습니다
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()
Unsafe.park()에있는 스레드의 전체 스택 추적은 무엇입니까? –
ThreadSoolExecutor.getTask() -> ThreadPoolExecutor $ Worker.run() -> LockSupport.park (Object) -> AbstractQueuedSynchronizer $ ConditionObject.await() -> LinkedBlockingQueue .take() -> 스레드.run() –
JenFallow
코드 블록에서 읽는 것이 훨씬 쉽고 질문 자체에서 중요한 부분을 차지하기 때문에 질문에 대한 의견을 수정했습니다. –