- 所有超级接口:
-
PlatformManagedObject
- 所有已知子接口:
-
ThreadMXBean
ThreadMXBean
支持监视和管理Java虚拟机中的平台线程。平台线程通常映射到由操作系统调度的内核线程。ThreadMXBean
不支持监视或管理虚拟线程。
Java虚拟机有一个实现此接口的实现类的单个实例。实现此接口的实例是一个MXBean,可以通过调用ManagementFactory.getThreadMXBean()
方法或从platform MBeanServer
方法获取。
用于在MBeanServer中唯一标识线程系统的MXBean的ObjectName
是:
java.lang:type=Threading
可以通过调用PlatformManagedObject.getObjectName()
方法获取。
线程ID
线程ID是通过调用线程的threadId()
方法返回的正长整型值。线程ID在其生命周期内是唯一的。当线程终止时,其线程ID可能会被重用。
此接口中的一些方法将线程ID或线程ID数组作为输入参数,并返回每个线程的信息。
线程CPU时间
Java虚拟机实现可能支持测量当前平台线程、任何平台线程或没有线程的CPU时间。可以使用isThreadCpuTimeSupported()
方法来确定Java虚拟机是否支持测量任何平台线程的CPU时间。可以使用isCurrentThreadCpuTimeSupported()
方法来确定Java虚拟机是否支持使用getCurrentThreadCpuTime()
和getCurrentThreadUserTime()
方法从平台线程测量CPU时间。
此接口提供的CPU时间具有纳秒精度,但不一定具有纳秒精确度。
Java虚拟机可能默认禁用CPU时间测量。可以使用isThreadCpuTimeEnabled()
和setThreadCpuTimeEnabled(boolean)
方法来测试CPU时间测量是否已启用,并分别启用/禁用此支持。在某些Java虚拟机实现中,启用线程CPU测量可能很昂贵。
线程争用监视
一些Java虚拟机可能支持线程争用监视。启用线程争用监视时,将收集并返回线程已阻塞同步或等待通知的累积经过时间,该时间将在ThreadInfo
对象中返回。
可以使用isThreadContentionMonitoringSupported()
方法来确定Java虚拟机是否支持线程争用监视。线程争用监视默认情况下是禁用的。可以使用setThreadContentionMonitoringEnabled(boolean)
方法来启用线程争用监视。
同步信息和死锁检测
一些Java虚拟机可能支持监视对象监视器使用和可拥有同步器使用。可以使用getThreadInfo(long[], boolean, boolean)
和dumpAllThreads(boolean, boolean)
方法来获取线程堆栈跟踪和同步信息,包括线程正在阻塞以获取或等待的锁以及线程当前拥有的锁。
ThreadMXBean
接口提供了findMonitorDeadlockedThreads()
和findDeadlockedThreads()
方法,用于查找运行应用程序中的死锁。
- 自版本:
- 1.5
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptiondumpAllThreads
(boolean lockedMonitors, boolean lockedSynchronizers) 返回所有活动平台线程的线程信息,包括堆栈跟踪和同步信息。default ThreadInfo[]
dumpAllThreads
(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) 返回所有活动平台线程的线程信息,包括指定数量元素的堆栈跟踪和同步信息。long[]
查找处于死锁状态的平台线程循环,这些线程正在等待获取对象监视器或可拥有同步器。long[]
查找处于死锁状态的平台线程循环,这些线程正在等待获取对象监视器。long[]
返回所有活动平台线程的线程ID。long
返回当前线程的总CPU时间(以纳秒为单位)。long
返回当前线程在用户模式下执行的CPU时间(以纳秒为单位)。int
返回当前活动的守护线程数。int
返回自Java虚拟机启动或峰值被重置以来的最大活动平台线程数。int
返回当前活动的平台线程数,包括守护线程和非守护线程。long
getThreadCpuTime
(long id) 返回指定ID的线程的总CPU时间(以纳秒为单位)。getThreadInfo
(long id) 返回指定id
的线程的线程信息,不包括堆栈跟踪。getThreadInfo
(long[] ids) 返回输入数组ids
中每个ID的线程信息,不包括堆栈跟踪。getThreadInfo
(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers) 返回输入数组ids
中每个ID的线程信息,包括堆栈跟踪和同步信息。default ThreadInfo[]
getThreadInfo
(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) 返回输入数组ids
中每个ID的线程信息,包括指定数量元素的堆栈跟踪和同步信息。getThreadInfo
(long[] ids, int maxDepth) 返回输入数组ids
中每个ID的线程信息,包括指定数量的堆栈跟踪元素。getThreadInfo
(long id, int maxDepth) 返回指定id
的线程信息,包括指定数量的堆栈跟踪元素。long
getThreadUserTime
(long id) 返回指定ID的线程在用户模式下执行的CPU时间(以纳秒为单位)。long
返回自Java虚拟机启动以来创建并启动的平台线程总数。boolean
测试Java虚拟机是否支持从平台线程测量CPU时间,使用getCurrentThreadCpuTime()
和getCurrentThreadUserTime()
方法。boolean
测试Java虚拟机是否支持监视对象监视器使用。boolean
测试Java虚拟机是否支持监视可拥有同步器使用。boolean
测试线程争用监视是否已启用。boolean
测试Java虚拟机是否支持线程争用监视。boolean
测试线程CPU时间测量是否已启用。boolean
测试Java虚拟机实现是否支持测量任何平台线程的CPU时间。void
将峰值线程计数重置为当前活动平台线程数。void
setThreadContentionMonitoringEnabled
(boolean enable) 启用或禁用线程争用监视。void
setThreadCpuTimeEnabled
(boolean enable) 启用或禁用线程CPU时间测量。Methods declared in interface java.lang.management.PlatformManagedObject
getObjectName
-
Method Details
-
getThreadCount
int getThreadCount()返回当前活动的平台线程数,包括守护线程和非守护线程。计数不包括虚拟线程。- 返回:
- 当前活动的平台线程数。
-
getPeakThreadCount
int getPeakThreadCount()返回自Java虚拟机启动或峰值被重置以来的最大活动平台线程数。计数不包括虚拟线程。- 返回:
- 峰值活动平台线程数。
-
getTotalStartedThreadCount
long getTotalStartedThreadCount()返回自Java虚拟机启动以来创建并启动的平台线程总数。计数不包括虚拟线程。- 返回:
- 启动的平台线程总数。
-
getDaemonThreadCount
int getDaemonThreadCount()返回当前活动的守护线程数。计数不包括虚拟线程。- 返回:
- 当前活动的守护线程数。
-
getAllThreadIds
long[] getAllThreadIds()返回所有活动平台线程的线程ID。不包括虚拟线程的线程ID。在此方法返回时,返回的数组中可能包含已终止的一些线程。- 返回:
-
一个
long
数组,每个元素是一个线程ID。 - 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("monitor")。
-
getThreadInfo
返回指定id
的线程信息,不包含堆栈跟踪。此方法等效于调用:getThreadInfo(id, 0);
此方法返回代表指定ID线程信息的
ThreadInfo
对象。返回的ThreadInfo
对象中的堆栈跟踪、锁定监视器和锁定同步器将为空。如果给定ID的线程是虚拟线程、未存活或不存在,则此方法将返回null
。线程是存活的,如果已启动且尚未终止。MBeanServer访问:
ThreadInfo
的映射类型是CompositeData
,其属性如ThreadInfo.from
方法中所指定。- 参数:
-
id
- 线程的线程ID。必须为正数。 - 返回:
-
给定ID的线程的
ThreadInfo
对象,不包含堆栈跟踪、锁定监视器和同步器信息;如果给定ID的线程是虚拟线程、未存活或不存在,则返回null
。 - 抛出:
-
IllegalArgumentException
- 如果id <= 0
。 -
SecurityException
- 如果存在安全管理器且调用者没有ManagementPermission("monitor")。
-
getThreadInfo
返回输入数组ids
中每个ID对应的线程信息,不包含堆栈跟踪。此方法等效于调用:getThreadInfo
(ids, 0);此方法返回
ThreadInfo
对象的数组。每个ThreadInfo
对象中的堆栈跟踪、锁定监视器和锁定同步器将为空。如果给定ID的线程是虚拟线程、未存活或不存在,则返回数组中相应元素将包含null
。线程是存活的,如果已启动且尚未终止。MBeanServer访问:
ThreadInfo
的映射类型是CompositeData
,其属性如ThreadInfo.from
方法中所指定。- 参数:
-
ids
- 线程ID的数组。 - 返回:
-
ThreadInfo
对象的数组,每个对象包含与输入ID数组中相应元素的线程信息,不包含堆栈跟踪、锁定监视器和同步器信息。 - 抛出:
-
IllegalArgumentException
- 如果输入数组ids
中的任何元素为<= 0
。 -
SecurityException
- 如果存在安全管理器且调用者没有ManagementPermission("monitor")。
-
getThreadInfo
返回指定id
的线程信息,包含指定数量的堆栈跟踪元素。maxDepth
参数指示从堆栈跟踪中检索的StackTraceElement
的最大数量。如果maxDepth == Integer.MAX_VALUE
,则将转储线程的整个堆栈跟踪。如果maxDepth == 0
,则不会转储线程的堆栈跟踪。此方法不获取线程的锁定监视器和锁定同步器。当Java虚拟机没有关于线程的堆栈跟踪信息或
maxDepth == 0
时,ThreadInfo
对象中的堆栈跟踪将是一个空的StackTraceElement
数组。如果给定ID的线程是虚拟线程、未存活或不存在,则此方法将返回
null
。线程是存活的,如果已启动且尚未终止。MBeanServer访问:
ThreadInfo
的映射类型是CompositeData
,其属性如ThreadInfo.from
方法中所指定。- 参数:
-
id
- 线程的线程ID。必须为正数。 -
maxDepth
- 要转储的堆栈跟踪条目的最大数量。可以使用Integer.MAX_VALUE
来请求转储整个堆栈。 - 返回:
-
给定ID的线程的
ThreadInfo
,不包含锁定监视器和同步器信息。如果给定ID的线程是虚拟线程、未存活或不存在,则返回null
。 - 抛出:
-
IllegalArgumentException
- 如果id <= 0
。 -
IllegalArgumentException
- 如果maxDepth is negative
。 -
SecurityException
- 如果存在安全管理器且调用者没有ManagementPermission("monitor")。
-
getThreadInfo
返回输入数组ids
中每个ID对应的线程信息,包含指定数量的堆栈跟踪元素。maxDepth
参数指示从堆栈跟踪中检索的StackTraceElement
的最大数量。如果maxDepth == Integer.MAX_VALUE
,则将转储线程的整个堆栈跟踪。如果maxDepth == 0
,则不会转储线程的堆栈跟踪。此方法不获取线程的锁定监视器和锁定同步器。当Java虚拟机没有关于线程的堆栈跟踪信息或
maxDepth == 0
时,ThreadInfo
对象中的堆栈跟踪将是一个空的StackTraceElement
数组。此方法返回
ThreadInfo
对象的数组,每个对象是与ids
数组中相同索引处的线程信息。如果给定ID的线程是虚拟线程、未存活或不存在,则在返回数组中相应元素中将设置null
。线程是存活的,如果已启动且尚未终止。MBeanServer访问:
ThreadInfo
的映射类型是CompositeData
,其属性如ThreadInfo.from
方法中所指定。- 参数:
-
ids
- 线程ID的数组 -
maxDepth
- 要转储的堆栈跟踪条目的最大数量。可以使用Integer.MAX_VALUE
来请求转储整个堆栈。 - 返回:
-
ThreadInfo
对象的数组,每个对象包含与输入ID数组中相应元素的线程信息,不包含锁定监视器和同步器信息。 - 抛出:
-
IllegalArgumentException
- 如果maxDepth is negative
。 -
IllegalArgumentException
- 如果输入数组ids
中的任何元素为<= 0
。 -
SecurityException
- 如果存在安全管理器且调用者没有ManagementPermission("monitor")。
-
isThreadContentionMonitoringSupported
boolean isThreadContentionMonitoringSupported()测试Java虚拟机是否支持线程争用监视。- 返回:
-
如果Java虚拟机支持线程争用监视,则返回
true
;否则返回false
。
-
isThreadContentionMonitoringEnabled
boolean isThreadContentionMonitoringEnabled()测试线程争用监视是否已启用。- 返回:
-
如果线程争用监视已启用,则返回
true
;否则返回false
。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持线程争用监视。 - 参见:
-
setThreadContentionMonitoringEnabled
void setThreadContentionMonitoringEnabled(boolean enable) 启用或禁用线程争用监视。线程争用监视默认情况下是禁用的。- 参数:
-
enable
-true
表示启用;false
表示禁用。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持线程争用监视。 -
SecurityException
- 如果存在安全管理器且调用者没有ManagementPermission("control")。 - 参见:
-
getCurrentThreadCpuTime
long getCurrentThreadCpuTime()返回当前线程的总CPU时间(以纳秒为单位)。返回的值精确到纳秒,但不一定是纳秒精度。如果实现区分用户模式时间和系统模式时间,则返回的CPU时间是当前线程在用户模式或系统模式下执行的时间。这是用于本地管理使用的便利方法,等效于调用:
getThreadCpuTime
(Thread.currentThread().threadId());- 返回值:
-
如果当前线程是平台线程且启用了CPU时间测量,则返回当前线程的总CPU时间;否则返回
-1
。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持对当前线程进行CPU时间测量。 - 参见:
-
getCurrentThreadUserTime
long getCurrentThreadUserTime()返回当前线程在用户模式下执行的CPU时间(以纳秒为单位)。返回值精确到纳秒,但不一定是纳秒精确度。这是一个用于本地管理的便利方法,等效于调用:
getThreadUserTime
(Thread.currentThread().threadId());- 返回值:
-
如果当前线程是平台线程且启用了CPU时间测量,则返回当前线程的用户级CPU时间;否则返回
-1
。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持对当前线程进行CPU时间测量。 - 参见:
-
getThreadCpuTime
long getThreadCpuTime(long id) 返回指定ID线程的总CPU时间(以纳秒为单位)。返回值精确到纳秒,但不一定是纳秒精确度。如果实现区分用户模式时间和系统模式时间,则返回的CPU时间是线程在用户模式或系统模式下执行的时间。如果指定ID的线程是虚拟线程、未启动或不存在,则此方法返回
-1
。如果禁用了CPU时间测量,则此方法返回-1
。线程处于活动状态表示已启动但尚未终止。如果在线程启动后启用了CPU时间测量,则Java虚拟机实现可以选择任何时间作为CPU时间测量开始的时间,直到启用该功能为止。
- 参数:
-
id
- 线程的线程ID - 返回值:
-
如果指定ID的线程是平台线程、线程处于活动状态且启用了CPU时间测量,则返回指定ID线程的总CPU时间;否则返回
-1
。 - 抛出:
-
IllegalArgumentException
- 如果id <= 0
。 -
UnsupportedOperationException
- 如果Java虚拟机不支持对其他线程进行CPU时间测量。 - 参见:
-
getThreadUserTime
long getThreadUserTime(long id) 返回指定ID线程在用户模式下执行的CPU时间(以纳秒为单位)。返回值精确到纳秒,但不一定是纳秒精确度。如果指定ID的线程是虚拟线程、未启动或不存在,则此方法返回
-1
。如果禁用了CPU时间测量,则此方法返回-1
。线程处于活动状态表示已启动但尚未终止。如果在线程启动后启用了CPU时间测量,则Java虚拟机实现可以选择任何时间作为CPU时间测量开始的时间,直到启用该功能为止。
- 参数:
-
id
- 线程的线程ID - 返回值:
-
如果指定ID的线程是平台线程、线程处于活动状态且启用了CPU时间测量,则返回指定ID线程的用户级CPU时间;否则返回
-1
。 - 抛出:
-
IllegalArgumentException
- 如果id <= 0
。 -
UnsupportedOperationException
- 如果Java虚拟机不支持对其他线程进行CPU时间测量。 - 参见:
-
isThreadCpuTimeSupported
boolean isThreadCpuTimeSupported()测试Java虚拟机实现是否支持对任何平台线程进行CPU时间测量。支持对任何平台线程进行CPU时间测量的Java虚拟机实现也将支持当前线程是平台线程时的CPU时间测量。- 返回值:
-
如果Java虚拟机支持对任何平台线程进行CPU时间测量,则返回
true
;否则返回false
。
-
isCurrentThreadCpuTimeSupported
boolean isCurrentThreadCpuTimeSupported()测试Java虚拟机是否支持从平台线程进行CPU时间测量,使用getCurrentThreadCpuTime()
和getCurrentThreadUserTime()
方法。如果isThreadCpuTimeSupported()
返回true
,则此方法返回true
。- 返回值:
-
如果Java虚拟机支持对当前平台线程进行CPU时间测量,则返回
true
;否则返回false
。
-
isThreadCpuTimeEnabled
boolean isThreadCpuTimeEnabled()测试线程CPU时间测量是否已启用。- 返回值:
-
如果线程CPU时间测量已启用,则返回
true
;否则返回false
。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持对其他线程或当前线程进行CPU时间测量。 - 参见:
-
setThreadCpuTimeEnabled
void setThreadCpuTimeEnabled(boolean enable) 启用或禁用线程CPU时间测量。默认值取决于平台。- 参数:
-
enable
-true
表示启用;false
表示禁用。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持对任何线程或当前线程进行CPU时间测量。 -
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("control")。 - 参见:
-
findMonitorDeadlockedThreads
long[] findMonitorDeadlockedThreads()查找处于死锁状态的平台线程的循环,这些线程正在等待获取对象监视器。即,处于阻塞状态的平台线程正在等待进入同步块或在Object.wait
调用后重新进入同步块,其中每个平台线程拥有一个监视器,同时尝试获取另一个已被另一个平台线程持有的监视器的循环。此方法不会找到包含虚拟线程的循环。更正式地,如果线程A被阻塞等待线程B拥有的监视器,而线程B被阻塞等待线程A拥有的监视器,则线程被称为监视器死锁。
此方法设计用于故障排除,而不是用于同步控制。这可能是一个昂贵的操作。
此方法仅查找涉及对象监视器的死锁。要查找涉及对象监视器和可拥有同步器的死锁,应使用
findDeadlockedThreads
方法。- 返回值:
-
如果存在处于监视器死锁状态的平台线程,则返回这些线程的ID数组;否则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("monitor")。 - 参见:
-
resetPeakThreadCount
void resetPeakThreadCount()将峰值线程计数重置为当前活动平台线程数。- 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("control")。 - 参见:
-
findDeadlockedThreads
long[] findDeadlockedThreads()查找处于死锁状态的平台线程的循环,这些线程正在等待获取对象监视器或可拥有同步器。如果每个线程在尝试获取另一个线程已持有的锁时拥有一个锁,而这些线程形成循环并等待锁,则平台线程将处于死锁状态。此方法不会找到包括虚拟线程的循环。此方法设计用于故障排除,而不是用于同步控制。这可能是一个昂贵的操作。
- 返回:
-
如果有等待对象监视器或可拥有同步器的平台线程的ID数组,则返回该数组;否则返回
null
。 - 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("monitor")。 -
UnsupportedOperationException
- 如果Java虚拟机不支持监视可拥有同步器的使用。 - 自:
- 1.6
- 参见:
-
isObjectMonitorUsageSupported
boolean isObjectMonitorUsageSupported()测试Java虚拟机是否支持监视对象监视器的使用。- 返回:
-
如果Java虚拟机支持监视对象监视器的使用,则返回
true
;否则返回false
。 - 自:
- 1.6
- 参见:
-
isSynchronizerUsageSupported
boolean isSynchronizerUsageSupported()测试Java虚拟机是否支持监视可拥有同步器的使用。- 返回:
-
如果Java虚拟机支持监视可拥有同步器的使用,则返回
true
;否则返回false
。 - 自:
- 1.6
- 参见:
-
getThreadInfo
返回每个ID在输入数组ids
中的平台线程的线程信息,包括堆栈跟踪和同步信息。这等效于调用:getThreadInfo(ids, lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
- 参数:
-
ids
- 一个线程ID数组。 -
lockedMonitors
- 如果为true
,则检索所有已锁定的监视器。 -
lockedSynchronizers
- 如果为true
,则检索所有已锁定的可拥有同步器。 - 返回:
-
包含有关ID数组中相应元素中的线程信息的
ThreadInfo
对象数组。 - 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("monitor")。 -
UnsupportedOperationException
- - 自:
- 1.6
- 参见:
-
getThreadInfo
default ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) 返回每个ID在输入数组ids
中的线程的线程信息,包括指定数量元素的堆栈跟踪和同步信息。如果maxDepth == 0
,则不会转储线程的堆栈跟踪。此方法获取每个线程的线程信息快照,包括:
- 指定数量元素的堆栈跟踪,
- 如果
lockedMonitors
为true
,则当前线程当前锁定的对象监视器, - 如果
lockedSynchronizers
为true
,则当前线程当前锁定的可拥有同步器。
此方法返回一个
ThreadInfo
对象数组,每个对象是关于与ids
数组中相同索引处的线程的线程信息。如果给定ID的线程是虚拟线程、不活动或不存在,则在返回的数组中相应元素中将设置为null
。线程是活动的,如果它已启动且尚未终止。如果线程不锁定任何对象监视器或
lockedMonitors
为false
,则返回的ThreadInfo
对象将具有一个空的MonitorInfo
数组。类似地,如果线程不锁定任何同步器或lockedSynchronizers
为false
,则返回的ThreadInfo
对象将具有一个空的LockInfo
数组。当
lockedMonitors
和lockedSynchronizers
参数都为false
时,等效于调用:getThreadInfo(ids, maxDepth)
此方法设计用于故障排除,而不是用于同步控制。这可能是一个昂贵的操作。
MBeanServer访问:
ThreadInfo
的映射类型是CompositeData
,具有在ThreadInfo.from
方法中指定的属性。- 实现要求:
-
默认实现会抛出
UnsupportedOperationException
。 - 参数:
-
ids
- 一个线程ID数组。 -
lockedMonitors
- 如果为true
,则检索所有已锁定的监视器。 -
lockedSynchronizers
- 如果为true
,则检索所有已锁定的可拥有同步器。 -
maxDepth
- 指示从堆栈跟踪中检索的最大StackTraceElement
数。 - 返回:
-
包含有关ID数组中相应元素中的线程信息的
ThreadInfo
对象数组。 - 抛出:
-
IllegalArgumentException
- 如果maxDepth
为负数。 -
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("monitor")。 -
UnsupportedOperationException
- - 自:
- 10
- 参见:
-
dumpAllThreads
返回所有活动平台线程的线程信息,包括堆栈跟踪和同步信息。不包括虚拟线程的线程ID。此方法等效于调用:dumpAllThreads(lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
- 参数:
-
lockedMonitors
- 如果为true
,则转储所有已锁定的监视器。 -
lockedSynchronizers
- 如果为true
,则转储所有已锁定的可拥有同步器。 - 返回:
-
所有活动平台线程的
ThreadInfo
数组。 - 抛出:
-
SecurityException
- 如果存在安全管理器且调用方没有ManagementPermission("monitor")。 -
UnsupportedOperationException
- - 自:
- 1.6
- 参见:
-
dumpAllThreads
default ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) 返回所有活动平台线程的线程信息,包括指定数量元素的堆栈跟踪和同步信息。如果maxDepth == 0
,则不会转储线程的堆栈跟踪。虚拟线程的线程ID不包括在内。在此方法返回时,返回数组中包含的一些线程可能已经终止。此方法返回一个
ThreadInfo
对象数组,如getThreadInfo(long[], boolean, boolean, int)
方法中所述。- 实现要求:
-
默认实现会抛出
UnsupportedOperationException
。 - 参数:
-
lockedMonitors
- 如果为true
,则转储所有锁定的监视器。 -
lockedSynchronizers
- 如果为true
,则转储所有锁定的可拥有同步器。 -
maxDepth
- 表示从堆栈跟踪中检索的最大数量StackTraceElement
。 - 返回:
-
所有活动平台线程的
ThreadInfo
数组。 - 抛出:
-
IllegalArgumentException
- 如果maxDepth
为负数。 -
SecurityException
- 如果存在安全管理器且调用者没有ManagementPermission("monitor")。 -
UnsupportedOperationException
- - 自:
- 10
- 参见:
-