3

有没有办法使用代码打印出所有线程及其 ID、状态?

例如,我有 5 个线程,我想枚举所有线程。

4

3 回答 3

2

您可以执行以下操作。

Set<Thread> threadSet = Thread.getAllStackTraces().keySet();

for (Thread thread: threadSet) {
 System.out.println(thread.getId());
}

在使用它们之前,请确保您阅读并理解了Thread.getAllStackTraces()方法。

于 2012-12-21T06:09:43.430 回答
1

使用 Thread.currentThread().getId();

于 2012-12-21T06:05:06.033 回答
-1

如果您需要从程序的其他部分控制线程,则将线程对象分配给公共变量,或者如果您只想知道正在运行的内容,则直接将其打印出来:

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() 直到数组大到足以包含所有条目。

于 2012-12-21T06:09:35.917 回答