Tôi có một ứng dụng Java không kết thúc. Phương thức chính kết thúc, nhưng chủ đề vẫn hoạt động và ứng dụng không kết thúc. Vấn đề là, có vẻ như không có bất kỳ khóa màn hình/chờ đợi, vì vậy tôi không thể nhìn thấy lý do tại sao nó không kết thúc. Theo Eclipse, tôi còn lại với hai luồng không phải là Daemon. Một được gắn nhãn [DestroyJavaVM] (có vẻ hy vọng!) Và cái kia có vẻ bị chặn trong Unsafe.park(boolean, long)
. Tôi nên bắt đầu điều tra ở đâu đây?Tôi bắt đầu điều tra quá trình Java của mình ở đâu sẽ không kết thúc?
Các stacktrace tóm tắt của các chủ đề thứ hai là:
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()
Dấu vết ngăn xếp đầy đủ của chuỗi trong Unsafe.park() là gì? –
Unsafe.park (boolean, long) -> LockSupport.park (Object) -> AbstractQueuedSynchronizer $ ConditionObject.await() -> LinkedBlockingQueue .take() -> ThreadPoolExecutor.getTask() -> ThreadPoolExecutor $ Worker.run() -> Chủ đề.run() –
JenFallow
Tôi đã chỉnh sửa bình luận của bạn thành câu hỏi bởi vì nó dễ đọc hơn trong một khối mã, và vì nó tạo thành một phần quan trọng của câu hỏi. –