【发布时间】:2018-03-08 06:32:57
【问题描述】:
我正在运行下面的代码来显示我的程序正在运行的线程
public void printTasks() {
System.out.println("get threads start");
for (Thread thread : Thread.getAllStackTraces().keySet()) {
//This block filters the non-java threads running
if (!thread.getThreadGroup().getName().equals("system")) {
System.out.println("hello");
}
}
System.out.println("get threads end");
}
问题是有时代码在打印“获取线程启动”之后就挂起,我怀疑挂起发生在“Thread.getAllStackTraces()”这一行
注意:我的程序使用线程执行一组任务,因此,它创建了大约 70 个线程并且挂起是间歇性的,我调用此方法的每 6 或 7 次中只有 1 次出现此问题
我的问题是:
- 这是一个已知问题吗?
- 有没有办法防止这种行为?
- 是否有更安全的方法来列出正在运行的线程?
编辑:我使用的是 java 1.8,问题发生在 Linux OEL 和 Windows Server 中,在这两种情况下都是间歇性的,软件作为独立桌面应用程序运行
提前谢谢你
【问题讨论】:
-
您运行的是什么版本的 Java,在什么操作系统上运行?这是一个独立的应用程序还是某种应用程序服务器?
标签: java multithreading performance freeze