我运行下面的代码,以显示我的程序正在运行的线程杭发生时Thread.getAllStackTraces()被调用
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次只有一次,我称这种方法的问题出现
我的问题是:
- 这是一个已知的问题吗?
- 有没有办法来防止这种行为?
- 是否有更安全的方法列出正在运行的线程?
编辑:我用java 1.8,这个问题发生在Linux的OEL和Windows Server,在这两种情况下,它是间歇性的,软件运行作为独立的桌面应用程序
预先感谢您
您运行的是什么版本的Java,以及在什么操作系统?这是一个独立的应用程序还是某种应用程序服务器? –