获取当前在 Java 中运行的所有线程的列表
2022-08-31 05:30:10
有没有办法获得当前JVM中所有正在运行的线程的列表(包括我的类未启动的线程)?
是否也可以获取列表中所有线程的 和 对象?Thread
Class
我希望能够通过代码做到这一点。
有没有办法获得当前JVM中所有正在运行的线程的列表(包括我的类未启动的线程)?
是否也可以获取列表中所有线程的 和 对象?Thread
Class
我希望能够通过代码做到这一点。
要获得可迭代集:
Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
性能:12 个线程为 0 毫秒(Azul JVM 16.0.1、Windows 10、Ryzen 5600X)。
获取根的句柄,如下所示: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(),直到数组足够大以包含所有条目。