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

3
有没有一种方法可以使用代码打印出所有线程及其 id、状态呢?
例如,我有5个线程,我想枚举它们所有。

请提供一个sscce - mre
3
可能是重复的问题 https://dev59.com/TXM_5IYBdhLWcg3wjkCr - Bhavik Ambani
1
有方法可以解决。你尝试过什么? - Rohit Jain
3个回答

2
您可以按照以下步骤操作:
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();

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

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

注意:请勿删除 HTML 标签。

1

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接