接口 ThreadMXBean 一个很好用的线程管理接口类 可以参考 jdk 帮助文档
|
JavaTM Platform Standard Ed. 6 | |||||||||
上一个类 下一个类 | 框架 无框架 所有类 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.management 接口 ThreadMXBean
public interface ThreadMXBean
Java 虚拟机线程系统的管理接口。
Java 虚拟机具有此接口的实现类的单一实例。实现此接口的实例是一个 MXBean,可以通过调用 ManagementFactory.getThreadMXBean()
方法或从平台 MBeanServer
方法获得它。
在 MBeanServer 内唯一标识线程系统的 MXBean 的 ObjectName 是:
线程 ID
线程 ID 是一个通过调用线程的 Thread.getId()
方法返回的 long 型正值。线程 ID 在其生存期间是唯一的。线程终止时,该线程 ID 可以被重新使用。
此接口中的某些方法将线程 ID 或线程 ID 数组作为输入参数,并返回每个线程的信息。
线程 CPU 时间
Java 虚拟机实现可能支持测量当前线程的 CPU 时间、测量任何线程的 CPU 时间,或者有可能不测量任何线程的 CPU 时间。
isThreadCpuTimeSupported()
方法可用于确定 Java 虚拟机是否支持测量任何线程的 CPU 时间。isCurrentThreadCpuTimeSupported()
方法可用于确定 Java 虚拟机是否支持测量当前线程的 CPU 时间。支持任何线程 CPU 时间测量的 Java 虚拟机实现也支持当前线程的 CPU 时间测量。
此接口提供的 CPU 时间具有毫微秒精度,但并不具有毫微秒的准确性。
Java 虚拟机可能默认禁用 CPU 时间测量。isThreadCpuTimeEnabled()
和 setThreadCpuTimeEnabled(boolean)
方法可用于测试是否启用 CPU 时间测量,并且可以分别启用/禁用此支持。启用线程 CPU 测量在某些 Java 虚拟机实现中可能开销很大。
线程争用监视
某些 Java 虚拟机可能支持线程争用监视。当启用线程争用监视时,将收集由于同步而受阻塞的线程累积时间和等待通知的线程累积时间,并在 ThreadInfo 对象中返回它们。
isThreadContentionMonitoringSupported()
方法可用于确定 Java 虚拟机是否支持线程争用监视。默认情况下,线程争用监视是禁用的。setThreadContentionMonitoringEnabled(boolean)
方法可用于启用线程争用监视。
同步信息和死锁检测
一些 Java 虚拟机可以支持使用对象监视器和使用可拥有同步器的监视。getThreadInfo(long[], boolean, boolean)
和 dumpAllThreads(boolean, boolean)
方法可以用来获取线程堆栈跟踪和同步信息,这些信息包括在获得线程时被哪一个锁阻塞或者正在等待哪一个锁,以及线程当前拥有哪些锁。
ThreadMXBean 接口提供 findMonitorDeadlockedThreads()
和 findDeadlockedThreads()
方法,这些方法用于在运行的应用程序中查找死锁。
- 从以下版本开始:
- 1.5
- 另请参见:
- JMX Specification., 访问 MXBeans 的方式
方法摘要 | |
---|---|
ThreadInfo[] |
dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers) 返回所有活动线程的线程信息,并带有堆栈跟踪和同步信息。 |
long[] |
findDeadlockedThreads() 查找因为等待获得对象监视器或可拥有同步器而处于死锁状态的线程循环。 |
long[] |
findMonitorDeadlockedThreads() 找到处于死锁状态(等待获取对象监视器)的线程的周期。 |
long[] |
getAllThreadIds() 返回活动线程 ID。 |
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 虚拟机是否支持使用可拥有同步器的监视。 |
boolean |
isThreadContentionMonitoringEnabled() 测试是否启用了线程争用监视。 |
boolean |
isThreadContentionMonitoringSupported() 测试 Java 虚拟机是否支持线程争用监视。 |
boolean |
isThreadCpuTimeEnabled() 测试是否启用了线程 CPU 时间测量。 |
boolean |
isThreadCpuTimeSupported() 测试 Java 虚拟机实现是否支持任何线程的 CPU 时间测量。 |
void |
resetPeakThreadCount() 将峰值线程计数重置为当前活动线程的数量。 |
void |
setThreadContentionMonitoringEnabled(boolean enable) 启用或禁用线程争用监视。 |
void |
setThreadCpuTimeEnabled(boolean enable) 启用或禁用线程 CPU 时间测量。 |
方法详细信息 |
---|
getThreadCount
int getThreadCount()
- 返回活动线程的当前数目,包括守护线程和非守护线程。
-
- 返回:
- 活动线程的当前数目。
getPeakThreadCount
int getPeakThreadCount()
- 返回自从 Java 虚拟机启动或峰值重置以来峰值活动线程计数。
-
- 返回:
- 峰值活动线程计数。
getTotalStartedThreadCount
long getTotalStartedThreadCount()
- 返回自从 Java 虚拟机启动以来创建和启动的线程总数目。
-
- 返回:
- 已启动的线程的总数。
getDaemonThreadCount
int getDaemonThreadCount()
- 返回活动守护线程的当前数目。
-
- 返回:
- 活动守护线程的当前数目。
getAllThreadIds
long[] getAllThreadIds()
- 返回活动线程 ID。在返回的数组中包含的某些线程可能在此方法返回时已经终止。
-
- 返回:
- long 数组,每个成员都是线程 ID。
- 抛出:
SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("monitor")。
getThreadInfo
ThreadInfo getThreadInfo(long id)
- 返回指定 id 的不具有堆栈跟踪的线程的线程信息。此方法等效于调用:
此方法返回表示指定 ID 的线程的线程信息的 ThreadInfo 对象。返回的 ThreadInfo 对象中的堆栈跟踪、锁定的监视器、锁定的同步器将为空。 如果给定 ID 的线程没有处于活动状态,或不存在,则此方法将返回 null。如果线程已经启动且尚未终止,则该线程处于活动状态。
MBeanServer 访问: ThreadInfo 的映射类型为 CompositeData,并具有
ThreadInfo.from
方法指定的那些属性。 -
- 参数:
id
- 线程的线程 ID。必须为正数。- 返回:
- 给定 ID 的线程的
ThreadInfo
对象,不带堆栈跟踪、锁定的监视器和同步器信息;如果给定 ID 的线程没有处于活动状态,或不存在,则返回 null。 - 抛出:
IllegalArgumentException
- 如果 id <= 0。SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("monitor")。
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids)
- 返回其 ID 在输出数组 ids 中的每个线程的线程信息,这些线程不具有堆栈跟踪。此方法等效于调用:
getThreadInfo
(ids, 0);此方法返回 ThreadInfo 对象数组。每个 ThreadInfo 对象中的堆栈跟踪、锁定的监视器、锁定的同步器将为空。 如果给定 ID 的线程没有处于活动状态,或不存在,则返回数组中的对应元素将包含 null。如果线程已经启动且尚未终止,则该线程处于活动状态。
MBeanServer 访问: ThreadInfo 的映射类型为 CompositeData,具有
ThreadInfo.from
方法指定的那些属性。 -
- 参数:
ids
- 线程 ID 数组。- 返回:
- 一个
ThreadInfo
对象的数组,每个数组元素均包含关于线程的信息,该线程 ID 在 ID 输入数组的对应元素中,不带堆栈跟踪、锁定的监视器和同步器信息。 - 抛出:
IllegalArgumentException
- 如果输入数组 ids 中的任何元素 <= 0。SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("monitor")。
getThreadInfo
ThreadInfo getThreadInfo(long id,
int maxDepth)
- 返回指定 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 为负数。SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("monitor")。
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids,
int maxDepth)
- 返回其 ID 在输入数组 ids 中的每个线程的线程信息,并带有指定堆栈追踪元素数的堆栈追踪。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
- 如果 maxDepth 为负数。IllegalArgumentException
- 如果输入数组 ids 中的任何元素 <= 0。SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("monitor")。
isThreadContentionMonitoringSupported
boolean isThreadContentionMonitoringSupported()
- 测试 Java 虚拟机是否支持线程争用监视。
-
- 返回:
- 如果 Java 虚拟机支持线程争用监视,则返回 true;否则返回 false。
isThreadContentionMonitoringEnabled
boolean isThreadContentionMonitoringEnabled()
- 测试是否启用了线程争用监视。
-
- 返回:
- 如果启用了线程争用监视,则返回 true;否则返回 false。
- 抛出:
UnsupportedOperationException
- 如果 Java 虚拟机不支持线程争用监视。- 另请参见:
isThreadContentionMonitoringSupported()
setThreadContentionMonitoringEnabled
void setThreadContentionMonitoringEnabled(boolean enable)
- 启用或禁用线程争用监视。默认情况下,线程争用监视是被禁用的。
-
- 参数:
enable
- 为 true 则启用;为 false 则禁用。- 抛出:
UnsupportedOperationException
- 如果 Java 虚拟机不支持线程争用监视。SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("control")。- 另请参见:
isThreadContentionMonitoringSupported()
getCurrentThreadCpuTime
long getCurrentThreadCpuTime()
- 返回当前线程的总 CPU 时间(以毫微秒为单位)。返回的值具有毫微秒的精度,但不具有毫微秒的准确度。如果实现对用户模式时间和系统模式时间加以区别,则返回的 CPU 时间为当前线程在用户模式或系统模式中执行的时间总量。
这是一个便于局部管理的方法,等效于调用:
getThreadCpuTime
(Thread.currentThread().getId()); -
- 返回:
- 如果启用了 CPU 时间测量,则返回当前线程的总 CPU 时间;否则返回 -1。
- 抛出:
UnsupportedOperationException
- 如果 Java 虚拟机不支持当前线程的 CPU 时间测量。- 另请参见:
getCurrentThreadUserTime()
,isCurrentThreadCpuTimeSupported()
,isThreadCpuTimeEnabled()
,setThreadCpuTimeEnabled(boolean)
getCurrentThreadUserTime
long getCurrentThreadUserTime()
- 返回当前线程在用户模式中执行的 CPU 时间(以毫微秒为单位)。返回的具有毫微秒的精度,但不具有毫微秒的准确度。
这是一个便于局部管理的方法,等效于调用:
getThreadUserTime
(Thread.currentThread().getId()); -
- 返回:
- 如果启用了 CPU 时间测量,则返回当前线程的用户级 CPU 时间;否则返回 -1。
- 抛出:
UnsupportedOperationException
- 如果 Java 虚拟机不支持当前线程的 CPU 时间测量。- 另请参见:
getCurrentThreadCpuTime()
,isCurrentThreadCpuTimeSupported()
,isThreadCpuTimeEnabled()
,setThreadCpuTimeEnabled(boolean)
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)
,isThreadCpuTimeSupported()
,isThreadCpuTimeEnabled()
,setThreadCpuTimeEnabled(boolean)
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 时间测定。- 另请参见:
getThreadCpuTime(long)
,isThreadCpuTimeSupported()
,isThreadCpuTimeEnabled()
,setThreadCpuTimeEnabled(boolean)
isThreadCpuTimeSupported
boolean isThreadCpuTimeSupported()
- 测试 Java 虚拟机实现是否支持任何线程的 CPU 时间测量。支持任何线程 CPU 时间测定的 Java 虚拟机实现也支持当前线程的 CPU 时间测定。
-
- 返回:
- 如果 Java 虚拟机支持任何线程的 CPU 时间测量,则返回 true;否则返回 false。
isCurrentThreadCpuTimeSupported
boolean isCurrentThreadCpuTimeSupported()
- 测试 Java 虚拟机是否支持当前线程的 CPU 时间测量。如果
isThreadCpuTimeSupported()
返回 true,此方法将返回 true。 -
- 返回:
- 如果 Java 虚拟机支持当前线程的 CPU 时间测量,则返回 true;否则返回 false。
isThreadCpuTimeEnabled
boolean isThreadCpuTimeEnabled()
- 测试是否启用了线程 CPU 时间测量。
-
- 返回:
- 如果启用了线程 CPU 时间测量,则返回 true;否则返回 false。
- 抛出:
UnsupportedOperationException
- 如果 Java 虚拟机不支持其他线程或当前线程的 CPU 时间测量。- 另请参见:
isThreadCpuTimeSupported()
,isCurrentThreadCpuTimeSupported()
setThreadCpuTimeEnabled
void setThreadCpuTimeEnabled(boolean enable)
- 启用或禁用线程 CPU 时间测量。此默认值与平台有关。
-
- 参数:
enable
- 为 true 则启用;为 false 则禁用。- 抛出:
UnsupportedOperationException
- 如果 Java 虚拟机不支持任何线程或当前线程的 CPU 时间测量。SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("control")。- 另请参见:
isThreadCpuTimeSupported()
,isCurrentThreadCpuTimeSupported()
findMonitorDeadlockedThreads
long[] findMonitorDeadlockedThreads()
- 找到处于死锁状态(等待获取对象监视器)的线程的周期。即线程被阻塞,等待进入同步块或在
Object.wait
调用后等待重新进入同步块,此时每个线程拥有一个监视器,且同时试图获取已经由周期中的另一个线程拥有的另一个监视器。更正式地说,如果线程属于某个周期,处于“等待已被占用的对象监视器”的关系中,则该线程处于监视器死锁 状态。在最简单的情况下,线程 A 被阻塞,在等待线程 B 拥有的监视器,而线程 B 也被阻塞,在等待线程 A 拥有的监视器。
此方法设计用于进行故障排除,但不适合进行同步控制。它可能成为开销很大的操作。
此方法只查找涉及对象监视器的死锁。要查找涉及对象监视器和可拥有同步器的死锁,应该使用
findDeadlockedThreads
方法。 -
- 返回:
- 处于监视器死锁状态的线程(如果有)的 ID 数组;否则返回 null。
- 抛出:
SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission("monitor")。- 另请参见:
findDeadlockedThreads()
resetPeakThreadCount
void resetPeakThreadCount()
- 将峰值线程计数重置为当前活动线程的数量。
-
- 抛出:
SecurityException
- 如果存在安全管理器,且调用方不具有 ManagementPermission(("control")。- 另请参见:
getPeakThreadCount()
,getThreadCount()
findDeadlockedThreads
long[] findDeadlockedThreads()
- 查找因为等待获得对象监视器或可拥有同步器而处于死锁状态的线程循环。如果每个线程拥有一个锁,当试图从另一个处于循环中的线程获取其持有的锁时,线程会在循环中处于死锁 状态,等待这两种锁。
此方法设计用于故障排除,不用于异常控制。它是一个开销很大的操作。
-
- 返回:
- 线程的 ID 数组,该线程处于死锁状态,等待对象监视器或可拥有同步器(如果有);否则返回 null。
- 抛出:
SecurityException
- 如果安全管理器存在,且调用者没有 ManagementPermission("monitor")。UnsupportedOperationException
- 如果 Java 虚拟机不支持使用可拥有同步器的监视。- 从以下版本开始:
- 1.6
- 另请参见:
isSynchronizerUsageSupported()
,findMonitorDeadlockedThreads()
isObjectMonitorUsageSupported
boolean isObjectMonitorUsageSupported()
- 测试 Java 虚拟机是否支持使用对象监视器的监视。
-
- 返回:
- 如果 Java 虚拟机支持使用对象监视器的监视,则返回 true;否则返回 false。
- 从以下版本开始:
- 1.6
- 另请参见:
dumpAllThreads(boolean, boolean)
isSynchronizerUsageSupported
boolean isSynchronizerUsageSupported()
- 测试 Java 虚拟机是否支持使用可拥有同步器的监视。
-
- 返回:
- 如果 Java 虚拟机支持使用可拥有同步器的监视,则返回 true;否则返回false。
- 从以下版本开始:
- 1.6
- 另请参见:
dumpAllThreads(boolean, boolean)
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids,
boolean lockedMonitors,
boolean lockedSynchronizers)
- 返回每个线程的线程信息,线程 ID 位于输入数组 ids 中,带有堆栈跟踪和同步信息。
此方法获取每个线程的线程信息快照,包括:
- 整个堆栈跟踪
- 线程当前锁定的对象监视器(如果 lockedMonitors 为 true)
- 线程当前锁定的可拥有同步器(如果 lockedSynchronizers 为 true)
此方法返回 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 在 ID 输入数组的对应元素中。- 抛出:
SecurityException
- 如果安全管理器存在,且调用者没有 ManagementPermission("monitor")。UnsupportedOperationException
-- 从以下版本开始:
- 1.6
- 另请参见:
isObjectMonitorUsageSupported()
,isSynchronizerUsageSupported()
dumpAllThreads
ThreadInfo[] dumpAllThreads(boolean lockedMonitors,
boolean lockedSynchronizers)
- 返回所有活动线程的线程信息,并带有堆栈跟踪和同步信息。 当此方法返回时,返回数组中包含的一些线程可能已经终止。
此方法返回
ThreadInfo
对象数组,ThreadInfo 对象是使用getThreadInfo(long[], boolean, boolean)
方法指定的。 -
- 参数:
lockedMonitors
- 如果为 true,则转储所有锁定的监视器。lockedSynchronizers
- 如果为 true,则转储所有锁定的可拥有同步器。- 返回:
- 所有活动线程的
ThreadInfo
数组。 - 抛出:
SecurityException
- 如果安全管理器存在,且调用者没有 ManagementPermission("monitor")。UnsupportedOperationException
-- 从以下版本开始:
- 1.6
- 另请参见:
isObjectMonitorUsageSupported()
,isSynchronizerUsageSupported()
|
JavaTM Platform Standard Ed. 6 | |||||||||
上一个类 下一个类 | 框架 无框架 所有类 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
提交错误或意见 有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。
接口 ThreadMXBean 一个很好用的线程管理接口类 可以参考 jdk 帮助文档的更多相关文章
- 如何快速访问MSDN某一个类或方法的帮助文档
如何快速访问MSDN某一个类或方法的帮助文档? 我一般都是在Google上搜索的如"string msdn",而不是在Msdn上直接查找(你不可能知道所有的类或方法的完整命名空间) ...
- PHP中的一个很好用的文件上传类
<?php class FileUpload{ private $filepath; //设置上传文件的路径 private $allowtype=array('jpg',' ...
- 一个很好的通用 excel 导出工具类
此类用主要 jxl +注解+流 实现扩展性很强,jxl性能会比poi好一点,值得我们学习. package oa.common.utils; import java.io.OutputStream; ...
- Helixoft VSdocman 是一个集成于Visual Studio并提供了命令行版本的帮助文档编译工具
http://www.helixoft.com/vsdocman/overview.html https://blog.fishlee.net/2016/01/14/helixoft-vsdocman ...
- 我的第一个python web开发框架(23)——代码版本控制管理与接口文档
书接上一回,小白和老菜聊到代码的版本控制和接口文档 小白:为什么要做版本控制,我不弄版本控制不也完成了项目了吗?要做版本控制不是很麻烦,又要安装服务又要提交代码,代码又不是多人用开发,还要写文档... ...
- Swagger: 一个restful接口文档在线生成+功能测试软件
一.什么是 Swagger? Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件.Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 ...
- Makefile经典教程(一个很棒很清晰的讲解)【转】
转自:https://blog.csdn.net/seven_amber/article/details/70216216 该篇文章为转载,是对原作者系列文章的总汇加上标注. 支持原创,请移步陈浩大神 ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
一.使用poi解析excel文档 注:全部采用poi接口进行解析,不需要区分xls.xlsx格式,不需要判断文档类型. poi中的日期格式判断仅支持欧美日期习惯,对国内的日期格式并不支持判断,怎么办? ...
随机推荐
- [Microsoft Teams]使用连接器接收Azure Devops的通知
1. 什么是连接器 连接器(connector)是Teams中频道的一个接受消息的功能,官方的解释如下: 连接器允许用户订阅来自 web 服务的接收通知和消息. 它们公开服务的 HTTPS 终结点,通 ...
- WordCount程序(Java)
Github项目地址:https://github.com/softwareCQT/web_camp/tree/master/wordCount 一.题目描述 实现一个简单而完整的软件工具(源程序特征 ...
- 042.集群网络-flannel及calico
一 Flannel组件 1.1 flannel介绍 Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平网络空间中.若需要实现这个网络假设,需要实现不同节点上的Docker容器之间 ...
- 什么是Hibernate
Hibernate是一个基于JDBC的主流持久性框架,是一个优秀的ORM(object relation mapping)(对象关系映射)实现 ORM就是通过java对象映射到数据库表中,通过操作ja ...
- Mysql5.7及以上版本 ONLY_FULL_GROUP_BY报错
近期在开发过程中,因为项目开发环境连接的mysql数据库是阿里云的数据库,而阿里云的数据库版本是5.6的.而测试环境的mysql是自己安装的5.7.因此在开发过程中有小伙伴不注意写了有关group b ...
- 【转】Java包管理器Maven学习
Maven 引入Jar包的几种情况 1.通过pom.xml中导入的jar包 (1)链接打开http://mvnrepository.com/ (2)搜索罐包,比如我想要的是servlet的api.ja ...
- Android 文章合集 200+ 篇
code小生 一个专注大前端领域的技术平台 公众号回复Android加入安卓技术群 镇楼 2017 文章合集 2017 年度文章分类整理 下面是 2018 年公众号所发表的文章分类整理 面经 一年经验 ...
- Github桌面版使用方式(MAC)
Github是一个流行的代码管理网站,同时也是全球最大的同性交友网站(滑稽).Github网页上你可以自由地托管自己的项目,也可以fork别人的项目过来玩耍,非常之方便,今天笔者就来介绍一下githu ...
- pd库dataframe基本操作
一.查看数据(查看对象的方法对于Series来说同样适用) 1.查看DataFrame前xx行或后xx行 a=DataFrame(data); a.head(6)表示显示前6行数据,若head()中不 ...
- OpenCV-Python 读取显示图像 | 五
目标 在这里,你将学习如何读取图像,如何显示图像以及如何将其保存回去 你将学习以下功能:cv.imread(),cv.imshow(),cv.imwrite() (可选)你将学习如何使用Matplot ...