public interface ThreadMXBean extends PlatformManagedObject
 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
 
 It can be obtained by calling the
 PlatformManagedObject.getObjectName() method.
 Thread.getId() method for a thread.
 The thread ID is unique during its lifetime.  When a thread
 is terminated, this thread ID may be reused.
 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.
 
 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.
 
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.
ManagementFactory.getPlatformMXBeans(Class), 
      JMX Specification., 
      Ways to Access MXBeans| Modifier and Type | Method and Description | 
|---|---|
| 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(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. | 
| ThreadInfo[] | getThreadInfo(long[] ids,
             int maxDepth)Returns the thread info for each thread
 whose ID is in the 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 usage. | 
| 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. | 
getObjectNameint getThreadCount()
int getPeakThreadCount()
long getTotalStartedThreadCount()
int getDaemonThreadCount()
long[] getAllThreadIds()
SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").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 in the returned ThreadInfo object will be empty. 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 method.
id - the thread ID of the thread. Must be positive.ThreadInfo object for the thread of the given ID
 with no stack trace, no locked monitor and no synchronizer info;
 null if the thread of the given ID is not alive or
 it does not exist.IllegalArgumentException - if id <= 0.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").ThreadInfo[] getThreadInfo(long[] ids)
getThreadInfo(ids, 0);
This method returns an array of the ThreadInfo objects. The stack trace, locked monitors, and locked synchronizers in each ThreadInfo object will be empty. 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 method.
ids - an array of thread IDs.ThreadInfo objects, each containing
 information about a thread whose ID is in the corresponding
 element of the input array of IDs
 with no stack trace, no locked monitor and no synchronizer info.IllegalArgumentException - if any element in the input array
         ids is <= 0.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").ThreadInfo getThreadInfo(long id, int maxDepth)
StackTraceElement to be retrieved from the stack trace.
 If maxDepth == Integer.MAX_VALUE, the entire stack trace of
 the thread will be dumped.
 If maxDepth == 0, no stack trace of the thread
 will be dumped.
 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 method.
id - the thread ID of the thread. Must be positive.maxDepth - the maximum number of entries in the stack trace
 to be dumped. Integer.MAX_VALUE could be used to request
 the entire stack to be dumped.ThreadInfo of the thread of the given ID
 with no locked monitor and synchronizer info.
 null if the thread of the given ID is not alive or
 it does not exist.IllegalArgumentException - if id <= 0.IllegalArgumentException - if maxDepth is negative.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)
StackTraceElement to be retrieved from the stack trace.
 If maxDepth == Integer.MAX_VALUE, the entire stack trace of
 the thread will be dumped.
 If maxDepth == 0, no stack trace of the thread
 will be dumped.
 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 method.
ids - an array of thread IDsmaxDepth - the maximum number of entries in the stack trace
 to be dumped. Integer.MAX_VALUE could be used to request
 the entire stack to be dumped.ThreadInfo objects, each containing
 information about a thread whose ID is in the corresponding
 element of the input array of IDs with no locked monitor and
 synchronizer info.IllegalArgumentException - if maxDepth is negative.IllegalArgumentException - if any element in the input array
      ids is <= 0.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").boolean isThreadContentionMonitoringSupported()
boolean isThreadContentionMonitoringEnabled()
UnsupportedOperationException - if the Java virtual
 machine does not support thread contention monitoring.isThreadContentionMonitoringSupported()void setThreadContentionMonitoringEnabled(boolean enable)
enable - true to enable;
               false to disable.UnsupportedOperationException - if the Java
 virtual machine does not support thread contention monitoring.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("control").isThreadContentionMonitoringSupported()long getCurrentThreadCpuTime()
This is a convenience method for local management use and is equivalent to calling:
getThreadCpuTime(Thread.currentThread().getId());
UnsupportedOperationException - if the Java
 virtual machine does not support CPU time measurement for
 the current thread.getCurrentThreadUserTime(), 
isCurrentThreadCpuTimeSupported(), 
isThreadCpuTimeEnabled(), 
setThreadCpuTimeEnabled(boolean)long getCurrentThreadUserTime()
This is a convenience method for local management use and is equivalent to calling:
getThreadUserTime(Thread.currentThread().getId());
UnsupportedOperationException - if the Java
 virtual machine does not support CPU time measurement for
 the current thread.getCurrentThreadCpuTime(), 
isCurrentThreadCpuTimeSupported(), 
isThreadCpuTimeEnabled(), 
setThreadCpuTimeEnabled(boolean)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.
id - the thread ID of a threadIllegalArgumentException - if id <= 0.UnsupportedOperationException - if the Java
 virtual machine does not support CPU time measurement for
 other threads.getThreadUserTime(long), 
isThreadCpuTimeSupported(), 
isThreadCpuTimeEnabled(), 
setThreadCpuTimeEnabled(boolean)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.
id - the thread ID of a threadIllegalArgumentException - if id <= 0.UnsupportedOperationException - if the Java
 virtual machine does not support CPU time measurement for
 other threads.getThreadCpuTime(long), 
isThreadCpuTimeSupported(), 
isThreadCpuTimeEnabled(), 
setThreadCpuTimeEnabled(boolean)boolean isThreadCpuTimeSupported()
boolean isCurrentThreadCpuTimeSupported()
isThreadCpuTimeSupported()
 returns true.boolean isThreadCpuTimeEnabled()
UnsupportedOperationException - if the Java virtual
 machine does not support CPU time measurement for other threads
 nor for the current thread.isThreadCpuTimeSupported(), 
isCurrentThreadCpuTimeSupported()void setThreadCpuTimeEnabled(boolean enable)
enable - true to enable;
               false to disable.UnsupportedOperationException - if the Java
 virtual machine does not support CPU time measurement for
 any threads nor for the current thread.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("control").isThreadCpuTimeSupported(), 
isCurrentThreadCpuTimeSupported()long[] findMonitorDeadlockedThreads()
Object.wait call,
 where each thread owns one monitor while
 trying to obtain another monitor already held by another thread
 in a cycle.
 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,
 the findDeadlockedThreads method
 should be used.
SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").findDeadlockedThreads()void resetPeakThreadCount()
SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("control").getPeakThreadCount(), 
getThreadCount()long[] findDeadlockedThreads()
This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.
SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").UnsupportedOperationException - if the Java virtual
 machine does not support monitoring of ownable synchronizer usage.isSynchronizerUsageSupported(), 
findMonitorDeadlockedThreads()boolean isObjectMonitorUsageSupported()
dumpAllThreads(boolean, boolean)boolean isSynchronizerUsageSupported()
dumpAllThreads(boolean, boolean)ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
This method obtains a snapshot of the thread information for each thread including:
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)
 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 is
 CompositeData with attributes as specified in the
 ThreadInfo.from method.
ids - an array of thread IDs.lockedMonitors - if true, retrieves all locked monitors.lockedSynchronizers - if true, retrieves all locked
             ownable synchronizers.ThreadInfo objects, each containing
 information about a thread whose ID is in the corresponding
 element of the input array of IDs.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").UnsupportedOperationException - isObjectMonitorUsageSupported(), 
isSynchronizerUsageSupported()ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
 This method returns an array of ThreadInfo objects
 as specified in the getThreadInfo(long[], boolean, boolean)
 method.
lockedMonitors - if true, dump all locked monitors.lockedSynchronizers - if true, dump all locked
             ownable synchronizers.ThreadInfo for all live threads.SecurityException - if a security manager
         exists and the caller does not have
         ManagementPermission("monitor").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, 2025, Oracle and/or its affiliates.  All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.