我運行下面的代碼,以顯示我的程序正在運行的線程杭發生時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,以及在什麼操作系統?這是一個獨立的應用程序還是某種應用程序服務器? –