爲了調試目的,我想知道我的程序的哪些線程仍在運行。似乎有一個或多個線程意外不會中斷。某種不錯的可打印格式將是一項獎勵。Java線程:找出哪些線程仍在運行
回答
jVisualVM是你的朋友對這種調試。它位於JDK安裝的/ bin目錄中。將所有線程顯示爲圖形視圖,並允許您深入瞭解他們正在做的事情。 Thread Dump
按鈕將打印出所有當前的堆棧跟蹤,以便您可以查看是否有東西卡在用戶代碼的某處。
+1 JVisualVM是一個很棒的工具。我更喜歡JConsole來檢查單個線程,但JVisualVM的Thread Dump功能非常棒。我希望它可以將它轉儲到允許文本搜索/突出顯示的顯示器上。 – 2010-12-06 23:30:16
我使用fgrep來查找文本。例如jstack
@Tim:是的。我只是將轉儲複製/粘貼到我的文本編輯器中。 – 2010-12-06 23:52:25
如果你正在尋找一個綱領性的解決方案,這樣的事情(在JDK 1.5或更高版本)應該工作:
Map<Thread, StackTraceElement[]> stack = Thread.getAllStackTraces();
for (Map.Entry<Thread, StackTraceElement[]> entry : stack.entrySet()) {
System.out.println("Thread named '" +
entry.getKey().getName() +
"' is alive");
}
繼nogudnik的回答,騰邦 - 福吉特具有綱領性線程轉儲(和死鎖檢測)功能,請參見http://tempusfugitlibrary.org/documentation/threading/dumps/
「似乎有一個或多個線程意外不會中斷」。我沒有說事情沒有中斷。調用Thread.interrupt()不會強制runnable停止。它設置中斷標誌,並可能導致阻塞操作(如Thread.sleep或java.nio調用)拋出InterruptedException或其他異常(如nio的ClosedByInterruptException)。你的runnable必須檢查Thread.currentThread()。isInterrupted()並且表現得很好。
- 1. Python:線程仍在運行
- 2. Java線程運行
- 3. 線程仍在C#中運行
- 4. Observable仍然在UI線程上運行
- 5. Java線程:運行一個簡單的java線程程序輸出混淆
- 6. 我可以找出使用Eclipse運行哪個線程嗎?
- 7. Java線程未運行
- 8. 在工作線程的主線程中運行一些代碼
- 9. Netbeans問題:UI退出後是否有線程仍在運行?
- 10. Java線程對象vs正在運行線程
- 11. java線程在運行多線程時不會中斷
- 12. python守護進程線程退出但進程仍在後臺運行
- 13. 在某些時段運行Java程序,在線託管?
- 14. 線路仍在運行?
- 15. Java線程:正在運行的JVM
- 16. 在Java中運行多個線程
- 17. 在線運行非GUI Java程序
- 18. 在特定時間運行java線程
- 19. 在Java中運行多線程
- 20. 在java中運行多少個線程?
- 21. 找出哪些線路應用程序崩潰?
- 22. 線程停止,但仍與假布爾值(Java)的運行
- 23. 當所有線程內核對象句柄關閉時,線程仍在運行
- 24. 瓶服務器退出時線程仍然運行
- 25. 從另一個線程運行線程
- 26. 新線程運行的UI線程
- 27. python多線程長線程運行
- 28. 線程可運行vs擴展線程
- 29. Java的多線程,讓線程並行
- 30. Java線程連接創建線程的順序運行
Thread.isAlive()? – yurib 2010-12-06 23:21:53