APIdia Launch Partner
Top Description Methods
java.lang.management

public Interface ThreadMXBean

extends PlatformManagedObject
Known Direct Implementers
sun.management.ThreadImpl
Imports
java.util.Map

The management interface for the thread system of the Java virtual machine.

ThreadMXBean supports monitoring and management of platform threads in the Java virtual machine. Platform threads are typically mapped to kernel threads scheduled by the operating system. ThreadMXBean does not support monitoring or management of virtual threads.

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 ID

Thread ID is a positive long value returned by calling the thread's threadId() method. The thread ID is unique during its lifetime. When the thread terminates, its 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.

Thread CPU time

A Java virtual machine implementation may support measuring the CPU time for the current platform thread, for any platform thread, or for no threads.

The isThreadCpuTimeSupported method can be used to determine if a Java virtual machine supports measuring of the CPU time for any platform thread. The isCurrentThreadCpuTimeSupported() method can be used to determine if a Java virtual machine supports measuring of the CPU time with the getCurrentThreadCpuTime() and getCurrentThreadUserTime() methods from a platform 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 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.

Thread Contention Monitoring

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 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 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.

Author
Mandy Chung
Since
1.5
See Also
ManagementFactory#getPlatformMXBeans(Class), JMX Specification., Ways to Access MXBeans

Method Summary

Modifier and TypeMethod and Description
public ThreadInfo[]

Returns:

an array of ThreadInfo for all live platform threads.
dumpAllThreads
(boolean
if true, dump all locked monitors.
lockedMonitors
,
boolean
if true, dump all locked ownable synchronizers.
lockedSynchronizers
)

Returns the thread info for all live platform threads with stack trace and synchronization information.

public default ThreadInfo[]

Returns:

an array of ThreadInfo for all live platform threads.
dumpAllThreads
(boolean
if true, dump all locked monitors.
lockedMonitors
,
boolean
if true, dump all locked ownable synchronizers.
lockedSynchronizers
,
int
indicates the maximum number of StackTraceElement to be retrieved from the stack trace.
maxDepth
)

Returns the thread info for all live platform threads with stack trace of the specified maximum number of elements and synchronization information.

public long[]

Returns:

an array of IDs of the platform threads that are deadlocked waiting for object monitors or ownable synchronizers, if any; null otherwise.
findDeadlockedThreads
()

Finds cycles of platform threads that are in deadlock waiting to acquire object monitors or ownable synchronizers.

public long[]

Returns:

an array of IDs of the platform threads that are monitor deadlocked, if any; null otherwise.
findMonitorDeadlockedThreads
()

Finds cycles of platform threads that are in deadlock waiting to acquire object monitors.

public long[]

Returns:

an array of long, each is a thread ID.
getAllThreadIds
()

Returns the threadIDs of all live platform threads.

public long

Returns:

the total CPU time for the current thread if the current thread is a platform thread and if CPU time measurement is enabled; -1 otherwise.
getCurrentThreadCpuTime
()

Returns the total CPU time for the current thread in nanoseconds.

public long

Returns:

the user-level CPU time for the current thread if the current thread is a platform thread and if CPU time measurement is enabled; -1 otherwise.
getCurrentThreadUserTime
()

Returns the CPU time that the current thread has executed in user mode in nanoseconds.

public int

Returns:

the current number of live platform threads that are daemon threads.
getDaemonThreadCount
()

Returns the current number of live platform threads that are daemon threads.

public int

Returns:

the peak live platform thread count.
getPeakThreadCount
()

Returns the peak live platform thread count since the Java virtual machine started or peak was reset.

public int

Returns:

the current number of live platform threads.
getThreadCount
()

Returns the current number of live platform threads including both daemon and non-daemon threads.

public long

Returns:

the total CPU time for a thread of the specified ID if the thread of the specified ID is a platform thread, the thread is alive, and CPU time measurement is enabled; -1 otherwise.
getThreadCpuTime
(long
the thread ID of a thread
id
)

Returns the total CPU time for a thread of the specified ID in nanoseconds.

public ThreadInfo

Returns:

a 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 a virtual thread, is not alive, or it does not exist.
getThreadInfo
(long
the thread ID of the thread. Must be positive.
id
)

Returns the thread info for a thread of the specified id with no stack trace.

public ThreadInfo[]

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 with no stack trace, no locked monitor and no synchronizer info.
getThreadInfo
(long[]
an array of thread IDs.
ids
)

Returns the thread info for each thread whose ID is in the input array ids with no stack trace.

public ThreadInfo

Returns:

a ThreadInfo of the thread of the given ID with no locked monitor and synchronizer info. null if the thread of the given ID is a virtual thread, is not alive or it does not exist.
getThreadInfo
(long
the thread ID of the thread. Must be positive.
id
,
int
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.
maxDepth
)

Returns a thread info for a thread of the specified id, with stack trace of a specified number of stack trace elements.

public ThreadInfo[]

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 with no locked monitor and synchronizer info.
getThreadInfo
(long[]
an array of thread IDs
ids
,
int
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.
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.

public ThreadInfo[]

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.
getThreadInfo
(long[]
an array of thread IDs.
ids
,
boolean
if true, retrieves all locked monitors.
lockedMonitors
,
boolean
if true, retrieves all locked ownable synchronizers.
lockedSynchronizers
)

Returns the thread info for each thread whose ID is in the input array ids, with stack trace and synchronization information.

public default ThreadInfo[]

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.
getThreadInfo
(long[]
an array of thread IDs.
ids
,
boolean
if true, retrieves all locked monitors.
lockedMonitors
,
boolean
if true, retrieves all locked ownable synchronizers.
lockedSynchronizers
,
int
indicates the maximum number of StackTraceElement to be retrieved from the stack trace.
maxDepth
)

Returns the thread info for each thread whose ID is in the input array ids, with stack trace of the specified maximum number of elements and synchronization information.

public long

Returns:

the user-level CPU time for a thread of the specified ID if the thread of the specified ID is a platform thread, the thread is alive, and CPU time measurement is enabled; -1 otherwise.
getThreadUserTime
(long
the thread ID of a thread
id
)

Returns the CPU time that a thread of the specified ID has executed in user mode in nanoseconds.

public long

Returns:

the total number of platform threads started.
getTotalStartedThreadCount
()

Returns the total number of platform threads created and also started since the Java virtual machine started.

public boolean

Returns:

true if the Java virtual machine supports CPU time measurement of the current platform thread; false otherwise.
isCurrentThreadCpuTimeSupported
()

Tests if the Java virtual machine supports CPU time measurement from a platform thread with the getCurrentThreadCpuTime() and getCurrentThreadUserTime() methods.

public boolean

Returns:

true if the Java virtual machine supports monitoring of object monitor usage; false otherwise.
isObjectMonitorUsageSupported
()

Tests if the Java virtual machine supports monitoring of object monitor usage.

public boolean

Returns:

true if the Java virtual machine supports monitoring of ownable synchronizer usage; false otherwise.
isSynchronizerUsageSupported
()

Tests if the Java virtual machine supports monitoring of ownable synchronizer usage.

public boolean

Returns:

true if thread contention monitoring is enabled; false otherwise.
isThreadContentionMonitoringEnabled
()

Tests if thread contention monitoring is enabled.

public boolean

Returns:

true if the Java virtual machine supports thread contention monitoring; false otherwise.
isThreadContentionMonitoringSupported
()

Tests if the Java virtual machine supports thread contention monitoring.

public boolean

Returns:

true if thread CPU time measurement is enabled; false otherwise.
isThreadCpuTimeEnabled
()

Tests if thread CPU time measurement is enabled.

public boolean

Returns:

true if the Java virtual machine supports CPU time measurement for any platform thread; false otherwise.
isThreadCpuTimeSupported
()

Tests if the Java virtual machine implementation supports CPU time measurement for any platform thread.

public void
resetPeakThreadCount()

Resets the peak thread count to the current number of live platform threads.

public void
setThreadContentionMonitoringEnabled(boolean
true to enable; false to disable.
enable
)

Enables or disables thread contention monitoring.

public void
setThreadCpuTimeEnabled(boolean
true to enable; false to disable.
enable
)

Enables or disables thread CPU time measurement.

Inherited from java.lang.management.PlatformManagedObject:
getObjectName

Method Detail

dumpAllThreadsback to summary
public ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)

Returns the thread info for all live platform threads with stack trace and synchronization information. The thread IDs of virtual threads are not included. This method is equivalent to calling:

dumpAllThreads(lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
Parameters
lockedMonitors:boolean

if true, dump all locked monitors.

lockedSynchronizers:boolean

if true, dump all locked ownable synchronizers.

Returns:ThreadInfo[]

an array of ThreadInfo for all live platform threads.

Exceptions
UnsupportedOperationException:
  • if lockedMonitors is true but the Java virtual machine does not support monitoring of object monitor usage; or
  • if lockedSynchronizers is true but the Java virtual machine does not support monitoring of ownable synchronizer usage.
Since
1.6
See Also
isObjectMonitorUsageSupported, isSynchronizerUsageSupported
dumpAllThreadsback to summary
public default ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)

Returns the thread info for all live platform threads with stack trace of the specified maximum number of elements and synchronization information. if maxDepth == 0, no stack trace of the thread will be dumped. The thread IDs of virtual threads are not included. Some threads included in the returned array may have been terminated when this method returns.

This method returns an array of ThreadInfo objects as specified in the getThreadInfo(long[], boolean, boolean, int) method.

Implementation Specification

The default implementation throws UnsupportedOperationException.

Parameters
lockedMonitors:boolean

if true, dump all locked monitors.

lockedSynchronizers:boolean

if true, dump all locked ownable synchronizers.

maxDepth:int

indicates the maximum number of StackTraceElement to be retrieved from the stack trace.

Returns:ThreadInfo[]

an array of ThreadInfo for all live platform threads.

Exceptions
IllegalArgumentException:
if maxDepth is negative.
UnsupportedOperationException:
  • if lockedMonitors is true but the Java virtual machine does not support monitoring of object monitor usage; or
  • if lockedSynchronizers is true but the Java virtual machine does not support monitoring of ownable synchronizer usage.
Since
10
See Also
isObjectMonitorUsageSupported, isSynchronizerUsageSupported
findDeadlockedThreadsback to summary
public long[] findDeadlockedThreads()

Finds cycles of platform threads that are in deadlock waiting to acquire object monitors or ownable synchronizers. Platform threads are deadlocked in a cycle waiting for a lock of these two types if each thread owns one lock while trying to acquire another lock already held by another platform thread in the cycle. Cycles that include virtual threads are not found by this method.

This method is designed for troubleshooting use, but not for synchronization control. It might be an expensive operation.

Returns:long[]

an array of IDs of the platform threads that are deadlocked waiting for object monitors or ownable synchronizers, if any; null otherwise.

Exceptions
UnsupportedOperationException:
if the Java virtual machine does not support monitoring of ownable synchronizer usage.
Since
1.6
See Also
isSynchronizerUsageSupported, findMonitorDeadlockedThreads
findMonitorDeadlockedThreadsback to summary
public long[] findMonitorDeadlockedThreads()

Finds cycles of platform threads that are in deadlock waiting to acquire object monitors. That is, platform threads that are blocked waiting to enter a synchronization block or waiting to reenter a synchronization block after an Object.wait call, where each platform thread owns one monitor while trying to obtain another monitor already held by another platform thread in a cycle. Cycles that include virtual threads are not found by this method.

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.

Returns:long[]

an array of IDs of the platform threads that are monitor deadlocked, if any; null otherwise.

See Also
findDeadlockedThreads
getAllThreadIdsback to summary
public long[] getAllThreadIds()

Returns the threadIDs of all live platform threads. The thread IDs of virtual threads are not included. Some threads included in the returned array may have been terminated when this method returns.

Returns:long[]

an array of long, each is a thread ID.

getCurrentThreadCpuTimeback to summary
public long getCurrentThreadCpuTime()

Returns the total CPU time for the current thread in nanoseconds. The returned value is of nanoseconds precision but not necessarily nanoseconds accuracy. If the implementation distinguishes between user mode time and system mode time, the returned CPU time is the amount of time that the current thread has executed in user mode or system mode.

This is a convenience method for local management use and is equivalent to calling:

  getThreadCpuTime(Thread.currentThread().threadId());
Returns:long

the total CPU time for the current thread if the current thread is a platform thread and if CPU time measurement is enabled; -1 otherwise.

Exceptions
UnsupportedOperationException:
if the Java virtual machine does not support CPU time measurement for the current thread.
See Also
getCurrentThreadUserTime, isCurrentThreadCpuTimeSupported, isThreadCpuTimeEnabled, setThreadCpuTimeEnabled
getCurrentThreadUserTimeback to summary
public long getCurrentThreadUserTime()

Returns the CPU time that the current thread has executed in user mode in nanoseconds. The returned value is of nanoseconds precision but not necessarily nanoseconds accuracy.

This is a convenience method for local management use and is equivalent to calling:

  getThreadUserTime(Thread.currentThread().threadId());
Returns:long

the user-level CPU time for the current thread if the current thread is a platform thread and if CPU time measurement is enabled; -1 otherwise.

Exceptions
UnsupportedOperationException:
if the Java virtual machine does not support CPU time measurement for the current thread.
See Also
getCurrentThreadCpuTime, isCurrentThreadCpuTimeSupported, isThreadCpuTimeEnabled, setThreadCpuTimeEnabled
getDaemonThreadCountback to summary
public int getDaemonThreadCount()

Returns the current number of live platform threads that are daemon threads. The count does not include virtual threads.

Returns:int

the current number of live platform threads that are daemon threads.

getPeakThreadCountback to summary
public int getPeakThreadCount()

Returns the peak live platform thread count since the Java virtual machine started or peak was reset. The count does not include virtual threads.

Returns:int

the peak live platform thread count.

getThreadCountback to summary
public int getThreadCount()

Returns the current number of live platform threads including both daemon and non-daemon threads. The count does not include virtual threads.

Returns:int

the current number of live platform threads.

getThreadCpuTimeback to summary
public long getThreadCpuTime(long id)

Returns the total CPU time for a thread of the specified ID in nanoseconds. The returned value is of nanoseconds precision but not necessarily nanoseconds accuracy. If the implementation distinguishes between user mode time and system mode time, the returned CPU time is the amount of time that the thread has executed in user mode or system mode.

If the thread of the specified ID is a virtual thread, 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 terminated.

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.

Parameters
id:long

the thread ID of a thread

Returns:long

the total CPU time for a thread of the specified ID if the thread of the specified ID is a platform thread, the thread is alive, and CPU time measurement is enabled; -1 otherwise.

Exceptions
IllegalArgumentException:
if id <= 0.
UnsupportedOperationException:
if the Java virtual machine does not support CPU time measurement for other threads.
See Also
getThreadUserTime, isThreadCpuTimeSupported, isThreadCpuTimeEnabled, setThreadCpuTimeEnabled
getThreadInfoback to summary
public ThreadInfo getThreadInfo(long id)

Returns the thread info for a thread of the specified id with no stack trace. This method is equivalent to calling:

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 a virtual thread, is not alive, or does not exist, then this method will return null. A thread is alive if it has been started and has not yet terminated.

MBeanServer access:
The mapped type of ThreadInfo is CompositeData with attributes as specified in the ThreadInfo.from method.

Parameters
id:long

the thread ID of the thread. Must be positive.

Returns:ThreadInfo

a 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 a virtual thread, is not alive, or it does not exist.

Exceptions
IllegalArgumentException:
if id <= 0.
getThreadInfoback to summary
public ThreadInfo[] getThreadInfo(long[] ids)

Returns the thread info for each thread whose ID is in the input array ids with no stack trace. This method is equivalent to calling:

  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 the given ID is a virtual thread, 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 terminated.

MBeanServer access:
The mapped type of ThreadInfo is CompositeData with attributes as specified in the ThreadInfo.from method.

Parameters
ids:long[]

an array of thread IDs.

Returns:ThreadInfo[]

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 with no stack trace, no locked monitor and no synchronizer info.

Exceptions
IllegalArgumentException:
if any element in the input array ids is <= 0.
getThreadInfoback to summary
public 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. The maxDepth parameter indicates the maximum number of 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 a virtual thread, 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 terminated.

MBeanServer access:
The mapped type of ThreadInfo is CompositeData with attributes as specified in the ThreadInfo.from method.

Parameters
id:long

the thread ID of the thread. Must be positive.

maxDepth:int

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.

Returns:ThreadInfo

a ThreadInfo of the thread of the given ID with no locked monitor and synchronizer info. null if the thread of the given ID is a virtual thread, is not alive or it does not exist.

Exceptions
IllegalArgumentException:
  • if id <= 0.
  • if maxDepth is negative.
getThreadInfoback to summary
public 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. The maxDepth parameter indicates the maximum number of 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 a virtual thread, 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 terminated.

MBeanServer access:
The mapped type of ThreadInfo is CompositeData with attributes as specified in the ThreadInfo.from method.

Parameters
ids:long[]

an array of thread IDs

maxDepth:int

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.

Returns:ThreadInfo[]

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 with no locked monitor and synchronizer info.

Exceptions
IllegalArgumentException:
  • if maxDepth is negative.
  • if any element in the input array ids is <= 0.
getThreadInfoback to summary
public 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. This is equivalent to calling:

getThreadInfo(ids, lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
Parameters
ids:long[]

an array of thread IDs.

lockedMonitors:boolean

if true, retrieves all locked monitors.

lockedSynchronizers:boolean

if true, retrieves all locked ownable synchronizers.

Returns:ThreadInfo[]

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.

Exceptions
UnsupportedOperationException:
  • if lockedMonitors is true but the Java virtual machine does not support monitoring of object monitor usage; or
  • if lockedSynchronizers is true but the Java virtual machine does not support monitoring of ownable synchronizer usage.
Since
1.6
See Also
isObjectMonitorUsageSupported, isSynchronizerUsageSupported
getThreadInfoback to summary
public default ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)

Returns the thread info for each thread whose ID is in the input array ids, with stack trace of the specified maximum number of elements and synchronization information. If maxDepth == 0, no stack trace of the thread will be dumped.

This method obtains a snapshot of the thread information for each thread including:

  • stack trace of the specified maximum number of elements,
  • the object monitors currently locked by the thread if lockedMonitors is true, and
  • the ownable synchronizers currently locked by the thread if 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 a virtual thread, 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 terminated.

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, maxDepth)

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.

Implementation Specification

The default implementation throws UnsupportedOperationException.

Parameters
ids:long[]

an array of thread IDs.

lockedMonitors:boolean

if true, retrieves all locked monitors.

lockedSynchronizers:boolean

if true, retrieves all locked ownable synchronizers.

maxDepth:int

indicates the maximum number of StackTraceElement to be retrieved from the stack trace.

Returns:ThreadInfo[]

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.

Exceptions
IllegalArgumentException:
if maxDepth is negative.
UnsupportedOperationException:
  • if lockedMonitors is true but the Java virtual machine does not support monitoring of object monitor usage; or
  • if lockedSynchronizers is true but the Java virtual machine does not support monitoring of ownable synchronizer usage.
Since
10
See Also
isObjectMonitorUsageSupported, isSynchronizerUsageSupported
getThreadUserTimeback to summary
public long getThreadUserTime(long id)

Returns the CPU time that a thread of the specified ID has executed in user mode in nanoseconds. The returned value is of nanoseconds precision but not necessarily nanoseconds accuracy.

If the thread of the specified ID is a virtual thread, 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 terminated.

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.

Parameters
id:long

the thread ID of a thread

Returns:long

the user-level CPU time for a thread of the specified ID if the thread of the specified ID is a platform thread, the thread is alive, and CPU time measurement is enabled; -1 otherwise.

Exceptions
IllegalArgumentException:
if id <= 0.
UnsupportedOperationException:
if the Java virtual machine does not support CPU time measurement for other threads.
See Also
getThreadCpuTime, isThreadCpuTimeSupported, isThreadCpuTimeEnabled, setThreadCpuTimeEnabled
getTotalStartedThreadCountback to summary
public long getTotalStartedThreadCount()

Returns the total number of platform threads created and also started since the Java virtual machine started. The count does not include virtual threads.

Returns:long

the total number of platform threads started.

isCurrentThreadCpuTimeSupportedback to summary
public boolean isCurrentThreadCpuTimeSupported()

Tests if the Java virtual machine supports CPU time measurement from a platform thread with the getCurrentThreadCpuTime() and getCurrentThreadUserTime() methods. This method returns true if isThreadCpuTimeSupported returns true.

Returns:boolean

true if the Java virtual machine supports CPU time measurement of the current platform thread; false otherwise.

isObjectMonitorUsageSupportedback to summary
public boolean isObjectMonitorUsageSupported()

Tests if the Java virtual machine supports monitoring of object monitor usage.

Returns:boolean

true if the Java virtual machine supports monitoring of object monitor usage; false otherwise.

Since
1.6
See Also
dumpAllThreads
isSynchronizerUsageSupportedback to summary
public boolean isSynchronizerUsageSupported()

Tests if the Java virtual machine supports monitoring of ownable synchronizer usage.

Returns:boolean

true if the Java virtual machine supports monitoring of ownable synchronizer usage; false otherwise.

Since
1.6
See Also
dumpAllThreads
isThreadContentionMonitoringEnabledback to summary
public boolean isThreadContentionMonitoringEnabled()

Tests if thread contention monitoring is enabled.

Returns:boolean

true if thread contention monitoring is enabled; false otherwise.

Exceptions
UnsupportedOperationException:
if the Java virtual machine does not support thread contention monitoring.
See Also
isThreadContentionMonitoringSupported
isThreadContentionMonitoringSupportedback to summary
public boolean isThreadContentionMonitoringSupported()

Tests if the Java virtual machine supports thread contention monitoring.

Returns:boolean

true if the Java virtual machine supports thread contention monitoring; false otherwise.

isThreadCpuTimeEnabledback to summary
public boolean isThreadCpuTimeEnabled()

Tests if thread CPU time measurement is enabled.

Returns:boolean

true if thread CPU time measurement is enabled; false otherwise.

Exceptions
UnsupportedOperationException:
if the Java virtual machine does not support CPU time measurement for other threads nor for the current thread.
See Also
isThreadCpuTimeSupported, isCurrentThreadCpuTimeSupported
isThreadCpuTimeSupportedback to summary
public boolean isThreadCpuTimeSupported()

Tests if the Java virtual machine implementation supports CPU time measurement for any platform thread. A Java virtual machine implementation that supports CPU time measurement for any platform thread will also support CPU time measurement for the current thread, when the current thread is a platform thread.

Returns:boolean

true if the Java virtual machine supports CPU time measurement for any platform thread; false otherwise.

resetPeakThreadCountback to summary
public void resetPeakThreadCount()

Resets the peak thread count to the current number of live platform threads.

See Also
getPeakThreadCount, getThreadCount
setThreadContentionMonitoringEnabledback to summary
public void setThreadContentionMonitoringEnabled(boolean enable)

Enables or disables thread contention monitoring. Thread contention monitoring is disabled by default.

Parameters
enable:boolean

true to enable; false to disable.

Exceptions
UnsupportedOperationException:
if the Java virtual machine does not support thread contention monitoring.
See Also
isThreadContentionMonitoringSupported
setThreadCpuTimeEnabledback to summary
public void setThreadCpuTimeEnabled(boolean enable)

Enables or disables thread CPU time measurement. The default is platform dependent.

Parameters
enable:boolean

true to enable; false to disable.

Exceptions
UnsupportedOperationException:
if the Java virtual machine does not support CPU time measurement for any threads nor for the current thread.
See Also
isThreadCpuTimeSupported, isCurrentThreadCpuTimeSupported