java.lang.Object
java.lang.management.ThreadInfo
线程信息。
ThreadInfo
包含有关线程的信息,包括:
一般线程信息
- 线程ID。
- 线程名称。
- 线程是否为守护线程
执行信息
- 线程状态。
- 由于以下原因而被阻塞的对象:
- 等待进入同步块/方法,或
- 等待在
Object.wait
方法中被通知,或 - 由于
LockSupport.park
调用而被停泊。
- 拥有被阻塞线程对象的线程的ID。
- 线程的堆栈跟踪。
- 线程锁定的对象监视器列表。
- 线程锁定的 可拥有同步器 列表。
- 线程优先级
同步统计信息
- 线程由于同步而阻塞或等待通知的次数。
- 自启用
线程争用监视
以来,线程由于同步而阻塞或等待通知的累积耗时。某些Java虚拟机实现可能不支持此功能。可以使用ThreadMXBean.isThreadContentionMonitoringSupported()
方法来确定Java虚拟机是否支持此功能。
此线程信息类设计用于监视系统,而非用于同步控制。
MXBean 映射
ThreadInfo
被映射为一个 CompositeData
,其属性如 from
方法中指定的那样。
- 自版本:
- 1.5
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionstatic ThreadInfo
from
(CompositeData cd) 返回由给定CompositeData
表示的ThreadInfo
对象。long
返回与此ThreadInfo
关联的线程阻塞以进入或重新进入监视器的总次数。long
返回与此ThreadInfo
关联的线程阻塞以进入或重新进入监视器的累积耗时(以毫秒为单位),自启用线程争用监视以来。某些Java虚拟机实现可能不支持此功能。返回一个MonitorInfo
对象数组,每个对象代表当前被与此ThreadInfo
关联的线程锁定的对象监视器。LockInfo[]
返回与此ThreadInfo
关联的线程因等待而被阻塞的对象的LockInfo
。返回与此ThreadInfo
关联的线程因等待而被阻塞的对象的字符串表示
。long
返回与此ThreadInfo
关联的线程因等待而被阻塞的对象的拥有线程ID。返回与此ThreadInfo
关联的线程因等待而被阻塞的对象的拥有线程名称。int
返回与此ThreadInfo
关联的线程的 线程优先级。返回与此ThreadInfo
关联的线程的堆栈跟踪。long
返回与此ThreadInfo
关联的线程的ID。返回与此ThreadInfo
关联的线程的名称。返回与此ThreadInfo
关联的线程的状态。long
返回与此ThreadInfo
关联的线程等待通知的总次数。long
返回与此ThreadInfo
关联的线程等待通知的累积耗时(以毫秒为单位),自启用线程争用监视以来。某些Java虚拟机实现可能不支持此功能。boolean
isDaemon()
检查与此ThreadInfo
关联的线程是否为 守护线程。boolean
检查与此ThreadInfo
关联的线程是否通过Java本机接口(JNI)执行本机代码。boolean
检查与此ThreadInfo
关联的线程是否已暂停。toString()
返回此线程信息的字符串表示。
-
Method Details
-
getThreadId
public long getThreadId()返回与此ThreadInfo
关联的线程的ID。- 返回:
- 关联线程的ID。
-
getThreadName
返回与此ThreadInfo
关联的线程的名称。- 返回:
- 关联线程的名称。
-
getThreadState
返回与此ThreadInfo
关联的线程的状态。- 返回:
-
关联线程的
Thread.State
。
-
getBlockedTime
public long getBlockedTime()返回与此ThreadInfo
关联的线程因等待而被阻塞以进入或重新进入监视器的累积耗时(以毫秒为单位),自启用线程争用监视以来。即自上次启用线程争用监视以来,线程处于BLOCKED
状态的总累计时间。如果线程争用监视已禁用,则此方法返回-1
。Java虚拟机可能使用高分辨率计时器来测量时间。当重新启用线程争用监视时,此统计信息将被重置。
- 返回:
-
线程进入
BLOCKED
状态的累积耗时,以毫秒为单位;如果线程争用监视已禁用,则返回-1
。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持此操作。 - 参见:
-
getBlockedCount
public long getBlockedCount()返回与此ThreadInfo
关联的线程阻塞以进入或重新进入监视器的总次数。即线程处于BLOCKED
状态的次数。- 返回:
-
线程进入
BLOCKED
状态的总次数。
-
getWaitedTime
public long getWaitedTime()返回与此ThreadInfo
关联的线程等待通知的累积耗时(以毫秒为单位),自启用线程争用监视以来。即自线程争用监视启用以来,线程处于WAITING
或TIMED_WAITING
状态的总累计时间。如果线程争用监视已禁用,则此方法返回-1
。Java虚拟机可能使用高分辨率计时器来测量时间。当重新启用线程争用监视时,此统计信息将被重置。
- 返回:
-
线程处于
WAITING
或TIMED_WAITING
状态的累积耗时,以毫秒为单位;如果线程争用监视已禁用,则返回-1
。 - 抛出:
-
UnsupportedOperationException
- 如果Java虚拟机不支持此操作。 - 参见:
-
getWaitedCount
public long getWaitedCount()- 返回:
-
线程处于
WAITING
或TIMED_WAITING
状态的总次数。
-
getLockInfo
返回与此ThreadInfo
关联的线程正在阻塞等待的对象的LockInfo
。线程可以因以下原因之一而被阻塞等待:- 等待获取或重新获取同步块/方法的对象监视器。
线程处于BLOCKED
状态,等待进入synchronized
语句或方法。 - 等待另一个线程通知的对象监视器。
线程由于调用Object.wait
方法而处于WAITING
或TIMED_WAITING
状态。 - 负责线程停放的同步对象。
线程由于调用LockSupport.park
方法而处于WAITING
或TIMED_WAITING
状态。同步对象是从LockSupport.getBlocker
方法返回的对象。通常是一个可拥有同步器或一个Condition
。
如果线程不处于上述任何条件下,则此方法返回
null
。- 返回:
-
如果有的话,返回线程正在阻塞等待的对象的
LockInfo
;否则返回null
。 - 自:
- 1.6
- 等待获取或重新获取同步块/方法的对象监视器。
-
getLockName
返回与此ThreadInfo
关联的线程正在阻塞等待的对象的字符串表示
。此方法等效于调用:getLockInfo().toString()
如果此线程未阻塞等待任何对象,或者对象不被任何线程拥有,则此方法将返回
null
。- 返回:
-
如果有的话,返回线程正在阻塞的对象的字符串表示;否则返回
null
。 - 另请参阅:
-
getLockOwnerId
public long getLockOwnerId()返回与此ThreadInfo
关联的线程正在阻塞等待的对象的所有者线程的ID。如果此线程未阻塞等待任何对象,或者对象不被任何线程拥有,则此方法将返回-1
。- 返回:
-
此线程正在阻塞的对象的所有者线程的线程ID;如果此线程未被阻塞,或者对象不被任何线程拥有,则返回
-1
。 - 另请参阅:
-
getLockOwnerName
返回与此ThreadInfo
关联的线程正在阻塞等待的对象的所有者线程的名称。如果此线程未阻塞等待任何对象,或者对象不被任何线程拥有,则此方法将返回null
。- 返回:
-
此线程正在阻塞的对象的所有者线程的名称;如果此线程未被阻塞,或者对象不被任何线程拥有,则返回
null
。 - 另请参阅:
-
getStackTrace
返回与此ThreadInfo
关联的线程的堆栈跟踪。如果未为此线程信息请求堆栈跟踪,则此方法将返回一个长度为零的数组。如果返回的数组长度非零,则数组的第一个元素表示堆栈顶部,即序列中最近的方法调用。数组的最后一个元素表示堆栈底部,即序列中最早的方法调用。某些Java虚拟机在某些情况下可能会省略一个或多个堆栈帧。在极端情况下,对于没有关于与此
ThreadInfo
关联的线程的堆栈跟踪信息的虚拟机,允许从此方法返回一个长度为零的数组。- 返回:
-
线程的
StackTraceElement
对象数组。
-
isSuspended
public boolean isSuspended()- 返回:
-
如果线程已挂起,则返回
true
;否则返回false
。
-
isInNative
public boolean isInNative()测试与此ThreadInfo
关联的线程是否通过Java本机接口(JNI)执行本机代码。JNI本机代码不包括虚拟机支持代码或虚拟机生成的编译本机代码。- 返回:
-
如果线程正在执行本机代码,则返回
true
;否则返回false
。
-
isDaemon
public boolean isDaemon()测试与此ThreadInfo
关联的线程是否为守护线程。- 返回:
-
如果线程是守护线程,则返回
true
;否则返回false
。 - 自:
- 9
- 另请参阅:
-
getPriority
public int getPriority()返回与此ThreadInfo
关联的线程的线程优先级。- 返回:
-
与此
ThreadInfo
关联的线程的优先级。 - 自:
- 9
-
toString
-
from
返回由给定的CompositeData
表示的ThreadInfo
对象。 表示版本为N的ThreadInfo
的CompositeData
必须包含版本≤ N中定义的所有属性,除非另有规定。相同的规则适用于给定CompositeData
的复合类型,以及其类型为CompositeType
的属性的传递性属性或组件类型。表示版本为N的
ThreadInfo
的CompositeData
包含"stackTrace"
属性和"lockedMonitors"
属性,分别表示StackTraceElement
数组和MonitorInfo
数组,它们的类型都是版本N。MonitorInfo
的复合类型中的"lockedStackFrame"
属性必须表示相同版本N的StackTraceElement
。否则,此方法将抛出IllegalArgumentException
异常。属性名称 类型 自版本 threadId java.lang.Long
5 threadName java.lang.String
5 threadState java.lang.String
5 suspended java.lang.Boolean
5 inNative java.lang.Boolean
5 blockedCount java.lang.Long
5 blockedTime java.lang.Long
5 waitedCount java.lang.Long
5 waitedTime java.lang.Long
5 lockName java.lang.String
5 lockOwnerId java.lang.Long
5 lockOwnerName java.lang.String
5 stackTrace javax.management.openmbean.CompositeData[]
,每个元素都是表示StackTraceElement
的CompositeData
,如下所述。5 lockInfo javax.management.openmbean.CompositeData
-LockInfo
的映射类型,如LockInfo.from(javax.management.openmbean.CompositeData)
方法中指定的那样。如果给定的
CompositeData
不包含此属性,则将从lockName
属性的值构造LockInfo
对象。6 lockedMonitors javax.management.openmbean.CompositeData[]
,其元素类型是MonitorInfo
的映射类型,如MonitorInfo.from
方法中指定的那样。如果给定的
CompositeData
不包含此属性,则此属性将设置为空数组。6 lockedSynchronizers javax.management.openmbean.CompositeData[]
,其元素类型是LockInfo
的映射类型,如LockInfo.from(javax.management.openmbean.CompositeData)
方法中指定的那样。如果给定的
CompositeData
不包含此属性,则此属性将设置为空数组。6 daemon java.lang.Boolean
如果给定的
CompositeData
不包含此属性,则此属性将设置为false
。9 priority java.lang.Integer
如果给定的
CompositeData
不包含此属性,则此属性将设置为Thread.NORM_PRIORITY
。9 StackTraceElement
的CompositeData
必须包含版本≤ N中定义的所有属性,除非另有规定。属性名称 类型 自版本 classLoaderName java.lang.String
9 moduleName java.lang.String
9 moduleVersion java.lang.String
9 className java.lang.String
5 methodName java.lang.String
5 fileName java.lang.String
5 lineNumber java.lang.Integer
5 nativeMethod java.lang.Boolean
5 - 参数:
-
cd
- 表示ThreadInfo
的CompositeData
- 返回:
-
如果
cd
不为null
,则返回由cd
表示的ThreadInfo
对象;否则返回null
。 - 抛出:
-
IllegalArgumentException
- 如果给定的cd
及其复合类型不包含特定运行时版本的ThreadInfo
所定义的所有属性。
-
getLockedMonitors
返回一个MonitorInfo
对象数组,每个对象代表与此ThreadInfo
关联的线程当前锁定的对象监视器。如果未请求此线程信息的锁定监视器或线程未锁定任何监视器,则此方法将返回一个长度为零的数组。- 返回:
-
一个
MonitorInfo
对象数组,表示线程锁定的对象监视器。 - 自版本:
- 1.6
-
getLockedSynchronizers
- 返回:
-
一个
LockInfo
对象数组,表示线程锁定的可拥有同步器。 - 自版本:
- 1.6
-