如何打印出所有线程及其当前状态?

时间:2012-12-21 06:03:29

标签: java

有没有办法使用代码打印出所有线程及其id,status?

例如,我有5个主题,我想枚举所有主题。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以执行以下操作。

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

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

确保在使用之前阅读并理解方法Thread.getAllStackTraces()

答案 2 :(得分:-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(),直到数组足够大以包含所有条目。