is new.
public interface ThreadMXBean
The management interface for the thread system of the Java virtual machine.
A Java virtual machine has a single instance of the implementation class of this interface. This instance implementing this interface is an MXBean that can be obtained by calling the ManagementFactory.getThreadMXBean() method or from the platform MBeanServer method.
The ObjectName for uniquely identifying the MXBean for the thread system within an MBeanServer is:
java.lang:type=Threading
Some methods in this interface take a thread ID or an array of thread IDs as the input parameter and return per-thread information.
The isThreadCpuTimeSupported() method can be used to determine if a Java virtual machine supports measuring of the CPU time for any thread. The isCurrentThreadCpuTimeSupported() method can be used to determine if a Java virtual machine supports measuring of the CPU time for the current thread. A Java virtual machine implementation that supports CPU time measurement for any thread will also support that for the current thread.
The CPU time provided by this interface has nanosecond precision but not necessarily nanosecond accuracy.
A Java virtual machine may disable CPU time measurement by default. The isThreadCpuTimeEnabled() and setThreadCpuTimeEnabled(boolean) methods can be used to test if CPU time measurement is enabled and to enable/disable this support respectively. Enabling thread CPU measurement could be expensive in some Java virtual machine implementations.
Some Java virtual machines may support thread contention monitoring. When thread contention monitoring is enabled, the accumulated elapsed time that the thread has blocked for synchronization or waited for notification will be collected and returned in the
ThreadInfo
object.
The
isThreadContentionMonitoringSupported()
method can be used to determine if a Java virtual machine supports thread contention monitoring. The thread contention monitoring is disabled by default. The
setThreadContentionMonitoringEnabled(boolean)
method can be used to enable thread contention monitoring.
Synchronization Information and Deadlock Detection
Some Java virtual machines may support monitoring of
object monitor usage
and
ownable synchronizer usage
. The
getThreadInfo(long[], boolean, boolean)
and
dumpAllThreads(boolean, boolean)
methods can be used to obtain the thread stack trace and synchronization information including which
lock
a thread is blocked to acquire or waiting on and which locks the thread currently owns.
The
ThreadMXBean
interface provides the
findMonitorDeadlockedThreads()
and
findDeadlockedThreads()
methods to find deadlocks in the running application.
| Method Summary | |
|---|---|
ThreadInfo
|
dumpAllThreads
(boolean lockedMonitors, boolean lockedSynchronizers)
Returns the thread info for all live threads with stack trace and synchronization information.
|
|
|
| long[] |
findDeadlockedThreads
Finds cycles of threads that are in deadlock waiting to acquire object
monitors or
ownable synchronizers
|
long[]
|
findMonitorDeadlockedThreads
()
Finds cycles of threads that are in deadlock waiting to acquire object monitors.
|
|
|
|
|
| long[] |
getAllThreadIds
() Returns all live thread IDs. |
| long |
getCurrentThreadCpuTime
() Returns the total CPU time for the current thread in nanoseconds. |
| long |
getCurrentThreadUserTime
() Returns the CPU time that the current thread has executed in user mode in nanoseconds. |
| int |
getDaemonThreadCount
() Returns the current number of live daemon threads. |
| int |
getPeakThreadCount
() Returns the peak live thread count since the Java virtual machine started or peak was reset. |
| int |
getThreadCount
() Returns the current number of live threads including both daemon and non-daemon threads. |
| long |
getThreadCpuTime
(long id) Returns the total CPU time for a thread of the specified ID in nanoseconds. |
| ThreadInfo |
getThreadInfo
(long id) Returns the thread info for a thread of the specified id with no stack trace. |
| ThreadInfo [] |
getThreadInfo
(long[] ids) Returns the thread info for each thread whose ID is in the input array ids with no stack trace. |
| ThreadInfo |
getThreadInfo
boolean lockedMonitors, boolean lockedSynchronizers)
Returns the thread info for each thread whose ID is in the input array ids
, with stack trace and synchronization information.
|
| ThreadInfo |
getThreadInfo
(long[] ids,
Returns
the
each
whose ID is in
input array
ids
, with stack trace of a specified number of stack trace elements.
|
ThreadInfo
|
getThreadInfo
(long id, int maxDepth)
Returns a thread info for a thread of the specified
id
, with stack trace of a specified number of stack trace elements.
|
| long |
getThreadUserTime
(long id) Returns the CPU time that a thread of the specified ID has executed in user mode in nanoseconds. |
| long |
getTotalStartedThreadCount
() Returns the total number of threads created and also started since the Java virtual machine started. |
| boolean |
isCurrentThreadCpuTimeSupported
() Tests if the Java virtual machine supports CPU time measurement for the current thread. |
| boolean |
isObjectMonitorUsageSupported
() Tests if the Java virtual machine supports monitoring of object monitor usage. |
| boolean |
isSynchronizerUsageSupported
() Tests if the Java virtual machine supports monitoring of
ownable synchronizer
|
| boolean |
isThreadContentionMonitoringEnabled
() Tests if thread contention monitoring is enabled. |
| boolean |
isThreadContentionMonitoringSupported
() Tests if the Java virtual machine supports thread contention monitoring. |
| boolean |
isThreadCpuTimeEnabled
() Tests if thread CPU time measurement is enabled. |
| boolean |
isThreadCpuTimeSupported
() Tests if the Java virtual machine implementation supports CPU time measurement for any thread. |
| void |
resetPeakThreadCount
() Resets the peak thread count to the current number of live threads. |
| void |
setThreadContentionMonitoringEnabled
(boolean enable) Enables or disables thread contention monitoring. |
| void |
setThreadCpuTimeEnabled
(boolean enable) Enables or disables thread CPU time measurement. |
| Method Detail |
|---|
int getThreadCount()
int getPeakThreadCount()
long getTotalStartedThreadCount()
int getDaemonThreadCount()
long[] getAllThreadIds()
ThreadInfo getThreadInfo(long id)
getThreadInfo(id, 0);
This method returns a
ThreadInfo
object representing the thread information for the thread of the specified ID. The stack
trace, locked monitors, and locked synchronizers
trace
in the returned
ThreadInfo
object will be empty.
object will be an empty array of
StackTraceElement
.
If a thread of the given ID is not alive or does not exist, this method will return
null
. A thread is alive if it has been started and has not yet died.
MBeanServer access
:
The mapped type of
ThreadInfo
is
CompositeData
with attributes as specified in
the
ThreadInfo.from
ThreadInfo
method.
.
trace, no locked monitor and no synchronizer info;
ThreadInfo[] getThreadInfo(long[] ids)
getThreadInfo(ids, 0);
This method returns an array of the
ThreadInfo
objects. The stack
trace, locked monitors, and locked synchronizers
trace
in each
ThreadInfo
object will be empty.
object will be an empty array of
StackTraceElement
.
If a thread of a given ID is not alive or does not exist, the corresponding element in the returned array will contain
null
. A thread is alive if it has been started and has not yet died.
MBeanServer access
:
The mapped type of
ThreadInfo
is
CompositeData
with attributes as specified in
the
ThreadInfo.from
ThreadInfo
method.
.
IDs.
IDs with no stack trace, no locked monitor and no synchronizer info.
ThreadInfo getThreadInfo(long id,
int maxDepth)
, with stack trace of a specified number of stack trace elements.
StackTraceElement
This method does not obtain the locked monitors and locked synchronizers of the thread.
When the Java virtual machine has no stack trace information about a thread or maxDepth == 0 , the stack trace in the ThreadInfo object will be an empty array of StackTraceElement .
If a thread of the given ID is not alive or does not exist, this method will return null . A thread is alive if it has been started and has not yet died.
MBeanServer access
:
The mapped type of
ThreadInfo
is
CompositeData
with attributes as specified in
the
ThreadInfo.from
ThreadInfo
method.
.
ID with no locked monitor and synchronizer info.
ThreadInfo[] getThreadInfo(long[] ids,
int maxDepth)
, with stack trace of a specified number of stack trace elements.
StackTraceElement
This method does not obtain the locked monitors and locked synchronizers of the threads.
When the Java virtual machine has no stack trace information about a thread or maxDepth == 0 , the stack trace in the ThreadInfo object will be an empty array of StackTraceElement .
This method returns an array of the ThreadInfo objects, each is the thread information about the thread with the same index as in the ids array. If a thread of the given ID is not alive or does not exist, null will be set in the corresponding element in the returned array. A thread is alive if it has been started and has not yet died.
MBeanServer access
:
The mapped type of
ThreadInfo
is
CompositeData
with attributes as specified in
the
ThreadInfo.from
ThreadInfo
method.
.
IDs with no locked monitor and synchronizer info.
boolean isThreadContentionMonitoringSupported()
boolean isThreadContentionMonitoringEnabled()
void setThreadContentionMonitoringEnabled(boolean enable)
long getCurrentThreadCpuTime()
This is a convenient method for local management use and is equivalent to calling:
getThreadCpuTime(Thread.currentThread().getId());
long getCurrentThreadUserTime()
This is a convenient method for local management use and is equivalent to calling:
getThreadUserTime(Thread.currentThread().getId());
long getThreadCpuTime(long id)
If the thread of the specified ID is not alive or does not exist, this method returns -1 . If CPU time measurement is disabled, this method returns -1 . A thread is alive if it has been started and has not yet died.
If CPU time measurement is enabled after the thread has started, the Java virtual machine implementation may choose any time up to and including the time that the capability is enabled as the point where CPU time measurement starts.
long getThreadUserTime(long id)
If the thread of the specified ID is not alive or does not exist, this method returns -1 . If CPU time measurement is disabled, this method returns -1 . A thread is alive if it has been started and has not yet died.
If CPU time measurement is enabled after the thread has started, the Java virtual machine implementation may choose any time up to and including the time that the capability is enabled as the point where CPU time measurement starts.
boolean isThreadCpuTimeSupported()
boolean isCurrentThreadCpuTimeSupported()
boolean isThreadCpuTimeEnabled()
void setThreadCpuTimeEnabled(boolean enable)
long[] findMonitorDeadlockedThreads()
More formally, a thread is monitor deadlocked if it is part of a cycle in the relation "is waiting for an object monitor owned by". In the simplest case, thread A is blocked waiting for a monitor owned by thread B, and thread B is blocked waiting for a monitor owned by thread A.
This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.
This method finds deadlocks involving only object monitors. To find deadlocks involving both object monitors and
ownable synchronizers
ownable synchronizers
, the
findDeadlockedThreads
method should be used.
void resetPeakThreadCount()
long[] findDeadlockedThreads()
ownable synchronizers
This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.
isObjectMonitorUsageSupported
boolean
Map<ThreadInfo,MonitorInfo[]>isObjectMonitorUsageSupported
getAllLockedMonitors()
Tests if the Java virtual machine supports monitoring of object monitor usage.
This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.
MBeanServer access
:
The mapped type of
ThreadInfo
and
MonitorInfo
is
CompositeData
with attributes as specified in
ThreadInfo
and
MonitorInfo
respectively.
true
if the Java virtual machine supports monitoring of object monitor usage;
false
otherwise.
dumpAllThreads(boolean, boolean)
isSynchronizerUsageSupported
booleanisSynchronizerUsageSupported
isObjectMonitorUsageSupported()
ownable synchronizer
ownable synchronizer
dumpAllThreads(boolean, boolean)
getThreadInfo
ThreadInfo
Map[]
<ThreadInfo,LockInfo[]>getThreadInfo
getAllLockedSynchronizers(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
()
Returns the thread info for each thread whose ID is in the input array
ids
, with stack trace and synchronization information.
This method obtains a snapshot of the thread information for each thread including:
the entire stack trace,
the object monitors currently locked by the thread if
lockedMonitors
is
true
, and
the
ownable synchronizers
lockedSynchronizers
is
true
.
This method returns an array of the
ThreadInfo
objects, each is the thread information about the thread with the same index as in the
ids
array. If a thread of the given ID is not alive or does not exist,
null
will be set in the corresponding element in the returned array. A thread is alive if it has been started and has not yet died.
If a thread does not lock any object monitor or
lockedMonitors
is
false
, the returned
ThreadInfo
object will have an empty
MonitorInfo
array. Similarly, if a thread does not lock any synchronizer or
lockedSynchronizers
is
false
, the returned
ThreadInfo
object will have an empty
LockInfo
array.
When both
lockedMonitors
and
lockedSynchronizers
parameters are
false
, it is equivalent to calling:
getThreadInfo(ids, Integer.MAX_VALUE)
Returns a map ofownable synchronizers
This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.
MBeanServer access
:
The mapped type of
ThreadInfo
and
LockInfo
is
CompositeData
with attributes as specified in
the
ThreadInfo.from
ThreadInfo
method.
and
LockInfo
respectively.
Parameters:
ids - an array of thread IDs.
lockedMonitors - if
true
, retrieves all locked monitors.
lockedSynchronizers - if
true
, retrieves all locked ownable synchronizers.
Returns:
an array of the
ThreadInfo
objects, each containing information about a thread whose ID is in the corresponding element of the input array of IDs.
-
if
lockedMonitors
is
true
but the Java virtual machine does not support monitoring of
object monitor usage
if
lockedSynchronizers
is
true
but the Java virtual machine does not support monitoring of
ownable synchronizer usage
isObjectMonitorUsageSupported()
,
isSynchronizerUsageSupported()
dumpAllThreads
ThreadInfo
[]
booleandumpAllThreads
isSynchronizerUsageSupported(boolean lockedMonitors, boolean lockedSynchronizers)
()
Returns the thread info for all live threads with stack trace and synchronization information. Some threads included in the returned array may have been terminated when this method returns.
This method returns an array of
ThreadInfo
Tests if the Java virtual machine supports monitoring of
ownable synchronizer
objects as specified in the
getThreadInfo(long[], boolean, boolean)
method.
usage.
Parameters:
lockedMonitors - if
true
, dump all locked monitors.
lockedSynchronizers - if
true
, dump all locked ownable synchronizers.
Returns:
an array of
ThreadInfo
for all live threads.
Throws:
SecurityException
- if a security manager exists and the caller does not have ManagementPermission("monitor").
UnsupportedOperationException
-
if
lockedMonitors
is
true
but the Java virtual machine does not support monitoring of
object monitor usage
if
lockedSynchronizers
is
true
but the Java virtual machine does not support monitoring of
ownable synchronizer usage
isObjectMonitorUsageSupported()
,
isSynchronizerUsageSupported()