有没有办法使用代码打印出所有线程及其 ID、状态?
例如,我有 5 个线程,我想枚举所有线程。
您可以执行以下操作。
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
for (Thread thread: threadSet) {
System.out.println(thread.getId());
}
在使用它们之前,请确保您阅读并理解了Thread.getAllStackTraces()方法。
使用 Thread.currentThread().getId();
如果您需要从程序的其他部分控制线程,则将线程对象分配给公共变量,或者如果您只想知道正在运行的内容,则直接将其打印出来:
public int myThreadId = 0;
public void run () {
System.out.println("Thread Name: " + Thread.currentThread().getName(); // Printing the thread name
myThreadId = Thread.currentThread().getId(); // Assigning the thread ID to a public variable
}
阅读更多:如何获取对 Java 线程的引用 | eHow.com http://www.ehow.com/how_6879305_reference-java-thread.html#ixzz2FfEUe3cF
还
获取根 ThreadGroup 的句柄,如下所示:
ThreadGroup rootGroup = Thread.currentThread( ).getThreadGroup( );
ThreadGroup parentGroup;
while ( ( parentGroup = rootGroup.getParent() ) != null ) {
rootGroup = parentGroup;
}
现在,重复调用根组上的 enumerate() 函数。第二个参数让您可以递归地获取所有线程:
Thread[] threads = new Thread[ rootGroup.activeCount() ];
while ( rootGroup.enumerate( threads, true ) == threads.length ) {
threads = new Thread[ threads.length * 2 ];
}
请注意我们如何重复调用 enumerate() 直到数组大到足以包含所有条目。