- java.lang.Object
-
- java.lang.management.ThreadInfo
-
public class ThreadInfo extends Object
线程信息。ThreadInfo
包含有关线程的信息,包括:一般线程信息
- 线程ID。
- 线程名称
- 线程是否是守护线程
执行信息
- 线程状态。
- 由于以下原因导致线程被阻塞的对象:
- 等待输入同步块/方法,或
- 等待通过
Object.wait
方法通知,或 - 由于
LockSupport.park
电话停车。
- 拥有线程被阻止的对象的线程的ID。
- 堆栈跟踪的线程。
- 由线程锁定的对象监视器列表。
- 列表ownable synchronizers被线程锁定。
- 线程优先级
Synchronization Statistics
- 线程阻塞同步或等待通知的次数。
- 自启用
thread contention monitoring
以来,线程已阻止同步或等待通知的累积经过时间。 某些Java虚拟机实现可能不支持此功能。 可以使用ThreadMXBean.isThreadContentionMonitoringSupported()
方法来确定Java虚拟机是否支持此功能。
该线程信息类设计用于监视系统,不用于同步控制。
MXBean映射
ThreadInfo
被映射到CompositeData
作为指定具有属性from
方法。- 从以下版本开始:
- 1.5
- 另请参见:
-
ThreadMXBean.getThreadInfo(long)
,ThreadMXBean.dumpAllThreads(boolean, boolean)
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 static ThreadInfo
from(CompositeData cd)
返回由给定的CompositeData
表示的ThreadInfo
对象。long
getBlockedCount()
返回与此ThreadInfo
相关联的线程阻止进入或重新输入监视器的总次数。long
getBlockedTime()
返回与启用线程争用监控功能相关联的与此ThreadInfo
相关联的线程阻止进入或重新输入监视器的大致累积已用时间(以毫秒为单位)。MonitorInfo[]
getLockedMonitors()
返回一个MonitorInfo
个对象的数组,每个对象表示当前由与此ThreadInfo
相关联的线程锁定的对象监视器。LockInfo[]
getLockedSynchronizers()
返回的数组LockInfo
对象,每个对象的表示ownable synchronizer当前由与此相关联的线程锁定ThreadInfo
。LockInfo
getLockInfo()
返回一个对象的LockInfo
,该对象与此ThreadInfo
相关联的线程被阻止等待。String
getLockName()
返回string representation
,与此相关的线程的对象的ThreadInfo
被阻塞等待。long
getLockOwnerId()
返回拥有与此ThreadInfo
相关联的线程被阻止等待的对象的线程的ID。String
getLockOwnerName()
返回拥有与此ThreadInfo
相关联的线程被阻止等待的对象的线程的名称。int
getPriority()
返回 thread priority与此相关的线程ThreadInfo
。StackTraceElement[]
getStackTrace()
返回与此ThreadInfo
相关联的线程的堆栈跟踪。long
getThreadId()
返回与此ThreadInfo
相关联的线程的ID。String
getThreadName()
返回与此ThreadInfo
相关联的线程的名称。Thread.State
getThreadState()
返回与此ThreadInfo
相关联的线程的状态。long
getWaitedCount()
返回与此ThreadInfo
相关联的线程等待通知的总次数。long
getWaitedTime()
返回与此ThreadInfo
相关联的线程等待通知的大致累积经过时间(以毫秒为单位),因为启用了线程争用监控。boolean
isDaemon()
测试与此ThreadInfo
相关联的线程是否为 daemon thread 。boolean
isInNative()
测试与此ThreadInfo
相关联的线程是否通过Java Native Interface(JNI)执行本机代码。boolean
isSuspended()
测试与此ThreadInfo
相关联的线程是否暂停。String
toString()
返回此线程信息的字符串表示形式。
-
-
-
方法详细信息
-
getThreadId
public long getThreadId()
返回与此ThreadInfo
相关联的线程的ID。- 结果
- 相关线程的ID。
-
getThreadName
public String getThreadName()
返回与此ThreadInfo
相关联的线程的名称。- 结果
- 相关线程的名称。
-
getThreadState
public Thread.State getThreadState()
返回与此ThreadInfo
相关联的线程的状态。- 结果
-
Thread.State
的相关线程。
-
getBlockedTime
public long getBlockedTime()
返回与此ThreadInfo
相关联的线程已阻止进入或重新进入监视器的线程争用监视的大致累积经过时间(以毫秒为单位),因为线程争用监视已启用。 即线程争用监控最后一次启用后线程已经处于BLOCKED
状态的总累计时间。 如果线程争用监控被禁用,此方法返回-1
。Java虚拟机可以使用高分辨率定时器来测量时间。 当重新启用线程争用监控时,此统计信息将重置。
- 结果
-
线程进入
BLOCKED
状态的近似累计消耗时间(以毫秒为单位);-1
如果线程争用监控被禁用。 - 异常
-
UnsupportedOperationException
- 如果Java虚拟机不支持此操作。 - 另请参见:
-
ThreadMXBean.isThreadContentionMonitoringSupported()
,ThreadMXBean.setThreadContentionMonitoringEnabled(boolean)
-
getBlockedCount
public long getBlockedCount()
返回与此ThreadInfo
关联的线程阻塞进入或重新输入监视器的总次数。 也就是线程已经处于BLOCKED
状态的次数。- 结果
-
线程进入
BLOCKED
状态的总次数。
-
getWaitedTime
public long getWaitedTime()
返回与此ThreadInfo
相关联的线程等待通知的大致累积经过时间(以毫秒为单位),因为启用了线程争用监控。 即线程争用监控启用后,线程已经处于WAITING
或TIMED_WAITING
状态的总累计时间。 如果线程争用监控被禁用,此方法返回-1
。Java虚拟机可以使用高分辨率定时器来测量时间。 当重新启用线程争用监控时,此统计信息将重置。
- 结果
-
线程已处于
WAITING
或TIMED_WAITING
状态的大致累计消耗时间(以毫秒为单位);-1
如果线程争用监控被禁用。 - 异常
-
UnsupportedOperationException
- 如果Java虚拟机不支持此操作。 - 另请参见:
-
ThreadMXBean.isThreadContentionMonitoringSupported()
,ThreadMXBean.setThreadContentionMonitoringEnabled(boolean)
-
getWaitedCount
public long getWaitedCount()
返回与此ThreadInfo
关联的线程等待通知的总次数。 即线程在WAITING
或TIMED_WAITING
状态下的次数。- 结果
-
线程在
WAITING
或TIMED_WAITING
状态的总次数。
-
getLockInfo
public LockInfo getLockInfo()
返回LockInfo
,与此相关的线程的对象的ThreadInfo
被阻塞等待。 一个线程可以被阻止等待以下之一:- 要获取用于输入或重新进入同步块/方法的对象监视器。
线程处于BLOCKED
状态,等待输入synchronized
语句或方法。 - 一个对象监视器被另一个线程通知。
线程在WAITING
或TIMED_WAITING
状态由于调用了Object.wait
方法。 - 负责线程停车的同步对象。
线程在WAITING
或TIMED_WAITING
状态由于调用了LockSupport.park
方法。 同步对象是从LockSupport.getBlocker
方法返回的对象。 通常是ownable synchronizer或Condition
。
该方法返回
null
如果线程不在上述任何一种情况。- 结果
-
LockInfo
的线程被阻塞等待的对象; 否则为null
。 - 从以下版本开始:
- 1.6
- 要获取用于输入或重新进入同步块/方法的对象监视器。
-
getLockName
public String getLockName()
返回string representation
,与此相关的线程的对象的ThreadInfo
被阻塞等待。 这个方法相当于调用:getLockInfo().toString()
此方法将返回
null
如果此线程不阻塞等待任何对象或者对象不是任何线程所有。- 结果
-
线程阻塞的对象的字符串表示;
否则为
null
。 - 另请参见:
-
getLockInfo()
-
getLockOwnerId
public long getLockOwnerId()
返回拥有与此ThreadInfo
相关联的线程被阻止等待的对象的线程的ID。 此方法将返回-1
如果此线程不阻塞等待任何对象,或者该对象不是任何线程所有。- 结果
-
该线程被阻止的对象的所有者线程的线程ID;
-1
如果此线程未被阻止或者该对象不是任何线程所有。 - 另请参见:
-
getLockInfo()
-
getLockOwnerName
public String getLockOwnerName()
返回拥有与此ThreadInfo
相关联的线程被阻止等待的对象的线程的名称。 此方法将返回null
如果此线程不阻塞等待任何对象,或者该对象不是任何线程所有。- 结果
-
拥有该线程被阻止的对象的线程的名称;
null
如果此线程未被阻止或者对象不是任何线程所有。 - 另请参见:
-
getLockInfo()
-
getStackTrace
public StackTraceElement[] getStackTrace()
返回与该ThreadInfo
相关联的线程的堆栈跟踪。 如果没有为此线程信息请求堆栈跟踪,则此方法将返回零长度数组。 如果返回的数组非零长度,则数组的第一个元素表示堆栈的顶部,这是序列中最近的方法调用。 数组的最后一个元素表示堆栈的底部,这是序列中最近最少的方法调用。在某些情况下,某些Java虚拟机可能会从堆栈跟踪中省略一个或多个堆栈帧。 在极端情况下,允许没有关于与该
ThreadInfo
相关联的线程的堆栈跟踪信息的虚拟机从该方法返回零长度数组。- 结果
-
一个数组的
StackTraceElement
对象的线程。
-
isSuspended
public boolean isSuspended()
测试与此ThreadInfo
相关联的线程是否暂停。 如果调用了Thread.suspend()
,此方法返回true
。- 结果
-
true
如果线程暂停;false
否则。
-
isInNative
public boolean isInNative()
测试与此ThreadInfo
相关联的线程是否通过Java Native Interface(JNI)执行本机代码。 JNI本机代码不包括虚拟机支持代码或虚拟机生成的已编译本机代码。- 结果
-
true
如果线程正在执行本机代码;false
否则。
-
isDaemon
public boolean isDaemon()
测试与此ThreadInfo
相关联的线程是否为 daemon thread 。- 结果
-
true
如果线程是守护线程,否则为false
。 - 从以下版本开始:
- 9
- 另请参见:
-
Thread.isDaemon()
-
getPriority
public int getPriority()
返回 thread priority与此相关的线程ThreadInfo
。- 结果
-
与此
ThreadInfo
相关联的线程的优先级。 - 从以下版本开始:
- 9
-
from
public static ThreadInfo from(CompositeData cd)
返回由给定的CompositeData
表示的ThreadInfo
对象。 给定的CompositeData
必须包含以下属性,除非另有规定:Attribute Name Type threadId java.lang.Long
threadName java.lang.String
threadState java.lang.String
suspended java.lang.Boolean
inNative java.lang.Boolean
blockedCount java.lang.Long
blockedTime java.lang.Long
waitedCount java.lang.Long
waitedTime java.lang.Long
lockInfo javax.management.openmbean.CompositeData
- the mapped type forLockInfo
as specified in theLockInfo.from(javax.management.openmbean.CompositeData)
method.If
cd
does not contain this attribute, theLockInfo
object will be constructed from the value of thelockName
attribute.lockName java.lang.String
lockOwnerId java.lang.Long
lockOwnerName java.lang.String
stackTrace javax.management.openmbean.CompositeData[]
Each element is a
CompositeData
representing StackTraceElement containing the following attributes:Attribute Name Type moduleName java.lang.String
moduleVersion java.lang.String
className java.lang.String
methodName java.lang.String
fileName java.lang.String
lineNumber java.lang.Integer
nativeMethod java.lang.Boolean
lockedMonitors javax.management.openmbean.CompositeData[]
whose element type is the mapped type forMonitorInfo
as specified in theMonitor.from
method.If
cd
does not contain this attribute, this attribute will be set to an empty array.lockedSynchronizers javax.management.openmbean.CompositeData[]
whose element type is the mapped type forLockInfo
as specified in theLockInfo.from(javax.management.openmbean.CompositeData)
method.If
cd
does not contain this attribute, this attribute will be set to an empty array.daemon java.lang.Boolean
priority java.lang.Integer
- 参数
-
cd
-CompositeData
代表ThreadInfo
- 结果
-
一个
ThreadInfo
对象由cd
表示,如果cd
不是null
;null
否则。 - 异常
-
IllegalArgumentException
- 如果cd
不表示具有上述属性的ThreadInfo
。
-
getLockedMonitors
public MonitorInfo[] getLockedMonitors()
返回一个MonitorInfo
个对象的数组,每个对象表示当前由与此ThreadInfo
相关联的线程锁定的对象监视器。 如果没有为此线程信息请求锁定的监视器,或者线程未锁定监视器,则此方法将返回零长度的数组。- 结果
-
表示由线程锁定的对象监视器的
MonitorInfo
对象的数组。 - 从以下版本开始:
- 1.6
-
getLockedSynchronizers
public LockInfo[] getLockedSynchronizers()
返回的数组LockInfo
对象,每个对象的表示ownable synchronizer当前由与此相关联的线程锁定ThreadInfo
。 如果没有为此线程信息请求锁定的同步器,或线程未锁定同步器,则此方法将返回零长度的数组。- 结果
-
一组
LockInfo
对象,表示线程锁定的自己的同步器。 - 从以下版本开始:
- 1.6
-
-