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 ThreadInfofrom(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虚拟机实现可能不支持此功能。booleanisDaemon()检查与此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.Long5 threadName java.lang.String5 threadState java.lang.String5 suspended java.lang.Boolean5 inNative java.lang.Boolean5 blockedCount java.lang.Long5 blockedTime java.lang.Long5 waitedCount java.lang.Long5 waitedTime java.lang.Long5 lockName java.lang.String5 lockOwnerId java.lang.Long5 lockOwnerName java.lang.String5 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.String9 moduleName java.lang.String9 moduleVersion java.lang.String9 className java.lang.String5 methodName java.lang.String5 fileName java.lang.String5 lineNumber java.lang.Integer5 nativeMethod java.lang.Boolean5 - 参数:
-
cd- 表示ThreadInfo的CompositeData - 返回:
-
如果
cd不为null,则返回由cd表示的ThreadInfo对象;否则返回null。 - 抛出:
-
IllegalArgumentException- 如果给定的cd及其复合类型不包含特定运行时版本的ThreadInfo所定义的所有属性。
-
getLockedMonitors
返回一个MonitorInfo对象数组,每个对象代表与此ThreadInfo关联的线程当前锁定的对象监视器。如果未请求此线程信息的锁定监视器或线程未锁定任何监视器,则此方法将返回一个长度为零的数组。- 返回:
-
一个
MonitorInfo对象数组,表示线程锁定的对象监视器。 - 自版本:
- 1.6
-
getLockedSynchronizers
- 返回:
-
一个
LockInfo对象数组,表示线程锁定的可拥有同步器。 - 自版本:
- 1.6
-