獲取程式啟動的所有執行緒的狀態,不包括系統執行緒
程式碼段:
import java.util.Set;
public class ThreadStatus {
public static void main(String args[]) throws Exception {
for (int i = 0; i < 5; i++){
Thread t = new Thread(new MyThread());
t.setName("MyThread:" + i);
t.start();
}
int threadCount = 0;
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
for (Thread t : threadSet) {
if (t.getThreadGroup() == Thread.currentThread().getThreadGroup()) {
System.out.println("Thread :" + t + ":" + "state:" + t.getState());
++threadCount;
}
}
System.out.println("Thread count started by Main thread:" + threadCount);
}
}
class MyThread implements Runnable {
public void run() {
try {
Thread.sleep(2000);
} catch(Exception err) {
err.printStackTrace();
}
}
}
輸出:
Thread :Thread[MyThread:1,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:3,5,main]:state:TIMED_WAITING
Thread :Thread[main,5,main]:state:RUNNABLE
Thread :Thread[MyThread:4,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:0,5,main]:state:TIMED_WAITING
Thread :Thread[MyThread:2,5,main]:state:TIMED_WAITING
Thread count started by Main thread:6
說明:
Thread.getAllStackTraces().keySet()
返回所有 Thread
s,包括應用程式執行緒和系統執行緒。如果你只對應用程式啟動的執行緒狀態感興趣,請通過檢查特定執行緒的執行緒組與主程式執行緒來迭代 Thread
集。
如果沒有上面的 ThreadGroup 條件,程式將返回以下系統執行緒的狀態:
Reference Handler
Signal Dispatcher
Attach Listener
Finalizer