列出Java中的虚拟线程

问题描述 投票:0回答:1

如何列出 JVM 中的所有虚拟线程?

ThreadMXBean.dumpAllThreads()
ThreadMXBean.getAllThreadIds()
ThreadGroup.enumerate()
Thread.getAllStackTraces()
不返回虚拟线程。

java multithreading jvm virtual-threads
1个回答
0
投票

ThreadContainers 类中 JVM 的根线程容器默认维护所有虚拟线程的列表(可以使用 jdk.trackAllThreads 系统属性禁用此行为,我认为在 java 21 之前默认为 false)。 不幸的是,ThreadContainers 类以及 ThreadContainer 类都属于 jdk.internal 模块,因此无法访问。 使用这些的所有其他类也是 jdk.internal 模块的一部分,或者不允许我们访问此线程列表。

另外,ThreadContainers类维护了所有执行器实例的列表,包括那些创建虚拟线程的实例,这些实例内部有一个其所有虚拟线程的列表,但是这个执行器列表也是不可访问的。

甚至 ThreadDumper 类(现在可以创建包括虚拟线程在内的线程转储)也位于 jdk.internal 模块内。

ThreadGroup 的文档以及您提到的其他类和方法声明它们不返回虚拟线程。

© www.soinside.com 2019 - 2024. All rights reserved.