public interface ThreadMXBean extends PlatformManagedObject
一个java虚拟机具有这个接口的实现类的一个实例。本实例实现此接口是一个MXBean可以通过调用ManagementFactory.getThreadMXBean()
方法或从platform MBeanServer
方法得到的。
用于唯一标识在MBeanServer线程系统MXBean的ObjectName是:
java.lang:type=Threading
可以通过调用
PlatformManagedObject.getObjectName()
方法得到的。
Thread.getId()
方法返回一个线程。线程标识在它的生命周期中是唯一的。当一个线程被终止时,这个线程的身份证可以被重用。
这个接口中的一些方法以一个线程的身份证或一个线程号的数组作为输入参数和每个线程信息的返回。
的isThreadCpuTimeSupported()
方法可用来确定是否一个java虚拟机的支持任意线程的CPU时间的测量。的isCurrentThreadCpuTimeSupported()
方法可用来确定是否一个java虚拟机的支持当前线程的CPU时间的测量。一个java虚拟机的实现,支持任意线程的CPU时间的测量也将支持当前线程的。
由这个接口提供的处理器时间有纳秒级的精度,但不一定是纳秒级的精度。
一个java虚拟机可以默认禁用CPU时间的测量。的isThreadCpuTimeEnabled()
和setThreadCpuTimeEnabled(boolean)
方法可以用来测试如果CPU时间测量是启用,启用/禁用这种支持分别。使线程CPU测量可以在一些java虚拟机的实现方法是昂贵的。
的isThreadContentionMonitoringSupported()
方法可以用来确定一个java虚拟机支持线程争用监测。默认情况下禁用线程争用监控。的setThreadContentionMonitoringEnabled(boolean)
方法可使线程争用监测。
getThreadInfo(long[], boolean, boolean)
和
dumpAllThreads(boolean, boolean)
方法可以用来获取线程的堆栈跟踪和同步的信息包括
lock线程被阻塞或等待获取锁的线程当前拥有的。
的ThreadMXBean接口提供findMonitorDeadlockedThreads()
和findDeadlockedThreads()
方法在运行的应用程序死锁。
ManagementFactory.getPlatformMXBeans(Class)
,
JMX Specification.,
Ways to Access MXBeans
Modifier and Type | Method and Description |
---|---|
ThreadInfo[] |
dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
返回具有堆栈跟踪和同步信息的所有活线程的线程信息。
|
long[] |
findDeadlockedThreads()
发现循环的线程在等待获得对象死锁监视器或
ownable synchronizers。
|
long[] |
findMonitorDeadlockedThreads()
查找等待获取对象监视器的线程的周期。
|
long[] |
getAllThreadIds()
返回所有活的线程入侵检测系统。
|
long |
getCurrentThreadCpuTime()
返回当前线程在纳秒的总CPU时间。
|
long |
getCurrentThreadUserTime()
返回当前线程在用户模式下执行时间的CPU时间。
|
int |
getDaemonThreadCount()
返回当前活守护线程数。
|
int |
getPeakThreadCount()
返回峰住线程计数由于java虚拟机的启动或峰值复位。
|
int |
getThreadCount()
返回当前线程的生活包括守护进程和非守护线程数。
|
long |
getThreadCpuTime(long id)
返回一个线程来指定ID的总CPU时间。
|
ThreadInfo |
getThreadInfo(long id)
返回一个指定的线程的堆栈跟踪
id没有线程信息。
|
ThreadInfo[] |
getThreadInfo(long[] ids)
返回每个线程的ID是在没有堆栈跟踪输入数组
ids线程信息。
|
ThreadInfo[] |
getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
返回每个线程的ID输入数组中的
ids线程的堆栈跟踪信息,以及同步信息。
|
ThreadInfo[] |
getThreadInfo(long[] ids, int maxDepth)
返回每个线程的ID输入数组中的
ids线程信息,以指定数量的堆栈跟踪元素的堆栈跟踪。
|
ThreadInfo |
getThreadInfo(long id, int maxDepth)
返回一个线程指定的
id线程信息,以指定数量的堆栈跟踪元素的堆栈跟踪。
|
long |
getThreadUserTime(long id)
返回一个线程指定ID在纳秒在用户模式下执行的CPU时间。
|
long |
getTotalStartedThreadCount()
返回创建的线程总数也开始从java虚拟机启动。
|
boolean |
isCurrentThreadCpuTimeSupported()
如果java虚拟机支持当前线程的CPU时间的测量。
|
boolean |
isObjectMonitorUsageSupported()
如果java虚拟机支持监测对象监测的应用。
|
boolean |
isSynchronizerUsageSupported()
如果java虚拟机支持
ownable synchronizer使用监控。
|
boolean |
isThreadContentionMonitoringEnabled()
如果启用了线程争用监视的测试。
|
boolean |
isThreadContentionMonitoringSupported()
如果java虚拟机支持线程争用监测。
|
boolean |
isThreadCpuTimeEnabled()
测试是否启用了线程的时间测量。
|
boolean |
isThreadCpuTimeSupported()
如果java虚拟机的实现支持任意线程的CPU时间的测量。
|
void |
resetPeakThreadCount()
重置峰值线程数对当前活的线程数。
|
void |
setThreadContentionMonitoringEnabled(boolean enable)
启用或禁用线程争用监控。
|
void |
setThreadCpuTimeEnabled(boolean enable)
启用或禁用线程的时间测量。
|
getObjectName
int getThreadCount()
int getPeakThreadCount()
long getTotalStartedThreadCount()
int getDaemonThreadCount()
long[] getAllThreadIds()
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
ThreadInfo getThreadInfo(long id)
getThreadInfo(id, 0);
此方法返回一个代表该线程的信息用于指定ID的堆栈跟踪,锁监视器线程ThreadInfo对象,并锁定同步在返回ThreadInfo对象将是空的。如果一个线程的ID不存在或不存在,此方法将返回null。如果一个线程已经启动,还没有死亡。
MBeanServer访问:
的ThreadInfo映射类型CompositeData属性中指定的ThreadInfo.from
方法。
id
-该线程的线程ID。必须是积极的。
ThreadInfo
对象的线程的ID没有堆栈跟踪,没有锁定的监控并没有同步信息;
null如果给定ID线程不活或不存在。
id <= 0
IllegalArgumentException
。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
ThreadInfo[] getThreadInfo(long[] ids)
getThreadInfo
(ids, 0);
此方法返回一个对象数组的ThreadInfo。堆栈跟踪,锁定显示器,并锁定同步器在每个ThreadInfo对象将是空的。如果一个线程的一个给定的ID是不是活着的或不存在,返回数组中的相应元素将包含null。如果一个线程已经启动,还没有死亡。
MBeanServer访问:
的ThreadInfo映射的类型与属性中指定的CompositeData ThreadInfo.from
方法。
ids
-线程ID数组。
ThreadInfo
对象的数组,每个都包含关于线程的ID是在没有堆栈跟踪IDS的输入数组的对应元素,没有锁定的监控并没有同步信息。
IllegalArgumentException
如果输入数组中的任何元素
<= 0
ids。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
ThreadInfo getThreadInfo(long id, int 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可以用来请求被整个堆栈。
ThreadInfo
的线程的ID没有被监控和同步信息。
null如果给定ID线程不活或不存在。
id <= 0
IllegalArgumentException
。
IllegalArgumentException
。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
ThreadInfo[] getThreadInfo(long[] ids, int 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是在相应的元素ID输入数组没有锁定监控和同步信息。
IllegalArgumentException
。
IllegalArgumentException
如果输入数组中的任何元素
<= 0
ids。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
boolean isThreadContentionMonitoringSupported()
boolean isThreadContentionMonitoringEnabled()
UnsupportedOperationException
如果java虚拟机不支持线程争用监测。
isThreadContentionMonitoringSupported()
void setThreadContentionMonitoringEnabled(boolean enable)
enable
-
true使
false禁用。
UnsupportedOperationException
如果java虚拟机不支持线程争用监测。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“控制”)。
isThreadContentionMonitoringSupported()
long getCurrentThreadCpuTime()
这是一个本地管理使用的方便方法,相当于调用:
getThreadCpuTime
(Thread.currentThread().getId());
UnsupportedOperationException
如果java虚拟机不支持当前线程的CPU时间的测量。
getCurrentThreadUserTime()
,
isCurrentThreadCpuTimeSupported()
,
isThreadCpuTimeEnabled()
,
setThreadCpuTimeEnabled(boolean)
long getCurrentThreadUserTime()
这是一个本地管理使用的方便方法,相当于调用:
getThreadUserTime
(Thread.currentThread().getId());
UnsupportedOperationException
如果java虚拟机不支持当前线程的CPU时间的测量。
getCurrentThreadCpuTime()
,
isCurrentThreadCpuTimeSupported()
,
isThreadCpuTimeEnabled()
,
setThreadCpuTimeEnabled(boolean)
long getThreadCpuTime(long id)
如果指定ID的线程不是活的或不存在,该方法返回-1。如果CPU时间测量是残疾人,此方法返回-1。线程是活着,如果已经开始了,还没有死。
如果CPU时间的测量是在线程已经开始启用,java虚拟机的实现可以选择任何时间截至及包括的能力是启用的地步,CPU时间的测量开始时间。
id
-一个线程的线程ID
id <= 0
IllegalArgumentException
。
UnsupportedOperationException
如果java虚拟机不支持其它线程的CPU时间的测量。
getThreadUserTime(long)
,
isThreadCpuTimeSupported()
,
isThreadCpuTimeEnabled()
,
setThreadCpuTimeEnabled(boolean)
long getThreadUserTime(long id)
如果指定ID的线程不是活的或不存在,该方法返回-1。如果CPU时间测量是残疾人,此方法返回-1。如果一个线程已经启动,还没有死亡。
如果CPU时间的测量是在线程已经开始启用,java虚拟机的实现可以选择任何时间截至及包括的能力是启用的地步,CPU时间的测量开始时间。
id
-一个线程的线程ID
id <= 0
IllegalArgumentException
。
UnsupportedOperationException
如果java虚拟机不支持其它线程的CPU时间的测量。
getThreadCpuTime(long)
,
isThreadCpuTimeSupported()
,
isThreadCpuTimeEnabled()
,
setThreadCpuTimeEnabled(boolean)
boolean isThreadCpuTimeSupported()
boolean isCurrentThreadCpuTimeSupported()
isThreadCpuTimeSupported()
返回
true此方法返回
true。
boolean isThreadCpuTimeEnabled()
UnsupportedOperationException
如果java虚拟机不支持其它线程的CPU时间的测量也为当前线程。
isThreadCpuTimeSupported()
,
isCurrentThreadCpuTimeSupported()
void setThreadCpuTimeEnabled(boolean enable)
enable
-
true使
false禁用。
UnsupportedOperationException
如果java虚拟机不支持任何线程的CPU时间的测量也为当前线程。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“控制”)。
isThreadCpuTimeSupported()
,
isCurrentThreadCpuTimeSupported()
long[] findMonitorDeadlockedThreads()
Object.wait
电话后的线程,每个线程拥有一个监视器,试图得到一个周期的另一个线程已经持有另一个监视器。
更正式地说,一个线程监控僵持不下,如果是在关系“经济周期的一部分,是在等待一个对象监控归”。在最简单的情况下,线程A被阻塞等待线程B所拥有的监视器,和线程B被阻塞等待一个线程所拥有的监视器。
此方法是专为排除故障而设计的,但不用于同步控制。这可能是一个昂贵的操作。
这种方法只涉及对象监视器发现死锁。要找到涉及对象监视器和ownable synchronizers死锁的方法,findDeadlockedThreads
应使用。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
findDeadlockedThreads()
void resetPeakThreadCount()
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“控制”)。
getPeakThreadCount()
,
getThreadCount()
long[] findDeadlockedThreads()
此方法是专为排除故障而设计的,但不用于同步控制。这可能是一个昂贵的操作。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
UnsupportedOperationException
如果java虚拟机不支持可拥有同步使用监控。
isSynchronizerUsageSupported()
,
findMonitorDeadlockedThreads()
boolean isObjectMonitorUsageSupported()
dumpAllThreads(boolean, boolean)
boolean isSynchronizerUsageSupported()
dumpAllThreads(boolean, boolean)
ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
此方法获取每个线程的线程信息的快照,包括:
此方法返回的ThreadInfo对象的数组,每个大约同一索引的线程的线程信息,在ids阵列。如果一个线程的ID是不是活着的或不存在,null将返回数组中对应的元素集合中。如果一个线程已经启动,还没有死亡。
如果一个线程不锁定任何对象监视器或lockedMonitors是false,返回的ThreadInfo对象将有一个空的MonitorInfo阵列。同样,如果一个线程不锁定任何同步或lockedSynchronizers是false,返回的ThreadInfo对象将有一个空的LockInfo阵列。
当lockedMonitors和lockedSynchronizers参数false,它相当于调用:
getThreadInfo(ids, Integer.MAX_VALUE)
此方法是专为排除故障而设计的,但不用于同步控制。这可能是一个昂贵的操作。
MBeanServer访问:
的ThreadInfo映射类型CompositeData属性中指定的ThreadInfo.from
方法。
ids
-线程ID数组。
lockedMonitors
-如果
true,检索所有锁监视器。
lockedSynchronizers
-如果
true,检索所有锁定可拥有同步器。
ThreadInfo
对象的数组,每个包含关于线程的ID是在IDS的输入数组的对应元素的信息。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
UnsupportedOperationException
-
isObjectMonitorUsageSupported()
,
isSynchronizerUsageSupported()
ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
这个方法返回一个数组ThreadInfo
对象在getThreadInfo(long[], boolean, boolean)
方法指定。
lockedMonitors
-如果
true,转储所有锁监视器。
lockedSynchronizers
-如果
true,转储所有锁定可拥有同步器。
ThreadInfo
数组的所有活的线程。
SecurityException
-如果存在一个安全管理和调用方没有managementpermission(“班长”)。
UnsupportedOperationException
-
isObjectMonitorUsageSupported()
,
isSynchronizerUsageSupported()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.