为了调试目的,我想知道我的程序的哪些线程仍在运行。似乎有一个或多个线程意外不会中断。某种不错的可打印格式将是一项奖励。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. 查找出来,如果线程仍在线程池
- 4. Observable仍然在UI线程上运行
- 5. 线程仍在C#中运行
- 6. 如何找到在我的Java应用程序中哪个线程仍在使用Netbeans 8 profiler运行?
- 7. 我可以找出使用Eclipse运行哪个线程吗?
- 8. Java线程:运行一个简单的java线程程序输出混淆
- 9. Java线程未运行
- 10. Java线程/运行停止
- 11. 在工作线程的主线程中运行一些代码
- 12. 找出哪些线程在JBoss中占用CPU?
- 13. IComman/DelegateCommand在哪个线程上运行
- 14. 运行doOnNex在某些线程JA BehaviorSubject
- 15. Netbeans问题:UI退出后是否有线程仍在运行?
- 16. 我可以在java中的线程中运行线程吗?
- 17. Java线程对象vs正在运行线程
- 18. java线程在运行多线程时不会中断
- 19. 使用.join()的Java多线程;你可以分配空闲线程来帮助仍然运行线程?
- 20. python守护进程线程退出但进程仍在后台运行
- 21. 运行Java多线程进程,顶部显示单线程
- 22. 检查多少个线程在运行/退出线程
- 23. 在某些时段运行Java程序,在线托管?
- 24. C#子线程仍在工作,即使主线程退出
- 25. 线路仍在运行?
- 26. 找出哪些线路应用程序崩溃?
- 27. 在特定时间运行java线程
- 28. 在java中运行多少个线程?
- 29. 在一个CPU上运行Java线程
- 30. Java线程:正在运行的JVM
Thread.isAlive()? – yurib 2010-12-06 23:21:53