java.lang.management

Class ThreadInfo

public class ThreadInfo extends Object

A class which maintains information about a particular thread. This information includes:

Since: 1.5

See Also: isThreadContentionMonitoringSupported

Method Summary
static ThreadInfofrom(CompositeData data)

Returns a {@link ThreadInfo} instance using the values given in the supplied {@link javax.management.openmbean.CompositeData} object.

longgetBlockedCount()
Returns the number of times this thread has been in the {@link java.lang.Thread.State#BLOCKED} state.
longgetBlockedTime()

Returns the accumulated number of milliseconds this thread has been in the {@link java.lang.Thread.State#BLOCKED} state since thread contention monitoring was last enabled.

MonitorInfo[]getLockedMonitors()
Returns an array of {@link MonitorInfo} objects representing information on the locks on object monitors held by the thread.
LockInfo[]getLockedSynchronizers()
Returns an array of {@link LockInfo} objects representing information on the locks on ownable synchronizers held by the thread.
LockInfogetLockInfo()

Returns a {@link LockInfo} object representing the lock on which this thread is blocked.

StringgetLockName()

Returns a {@link java.lang.String} representation of the lock on which this thread is blocked.

longgetLockOwnerId()
Returns the identifier of the thread which owns the monitor lock this thread is waiting for.
StringgetLockOwnerName()
Returns the name of the thread which owns the monitor lock this thread is waiting for.
StackTraceElement[]getStackTrace()

Returns the stack trace of this thread to the depth specified on creation of this {@link ThreadInfo} object.

longgetThreadId()
Returns the identifier of the thread associated with this instance of {@link ThreadInfo}.
StringgetThreadName()
Returns the name of the thread associated with this instance of {@link ThreadInfo}.
Thread.StategetThreadState()
Returns the state of the thread associated with this instance of {@link ThreadInfo}.
longgetWaitedCount()
Returns the number of times this thread has been in the {@link java.lang.Thread.State#WAITING} or {@link java.lang.Thread.State#TIMED_WAITING} state.
longgetWaitedTime()

Returns the accumulated number of milliseconds this thread has been in the {@link java.lang.Thread.State#WAITING} or {@link java.lang.Thread.State#TIMED_WAITING} state, since thread contention monitoring was last enabled.

booleanisInNative()
Returns true if the thread is in a native method.
booleanisSuspended()
Returns true if the thread has been suspended using {@link java.lang.Thread#suspend()}.
StringtoString()
Returns a {@link java.lang.String} representation of this {@link ThreadInfo} object.

Method Detail

from

public static ThreadInfo from(CompositeData data)

Returns a {@link ThreadInfo} instance using the values given in the supplied {@link javax.management.openmbean.CompositeData} object. The composite data instance should contain the following attributes with the specified types:

NameType
threadIdjava.lang.Long
threadNamejava.lang.String
threadStatejava.lang.String
suspendedjava.lang.Boolean
inNativejava.lang.Boolean
blockedCountjava.lang.Long
blockedTimejava.lang.Long
waitedCountjava.lang.Long
waitedTimejava.lang.Long
lockNamejava.lang.String
lockOwnerIdjava.lang.Long
lockOwnerNamejava.lang.String
stackTracejavax.management.openmbean.CompositeData[]

The stack trace is further described as:

NameType
classNamejava.lang.String
methodNamejava.lang.String
fileNamejava.lang.String
lineNumberjava.lang.Integer
nativeMethodjava.lang.Boolean

Parameters: data the composite data structure to take values from.

Returns: a new instance containing the values from the composite data structure, or null if the data structure was also null.

Throws: IllegalArgumentException if the composite data structure does not match the structure outlined above.

getBlockedCount

public long getBlockedCount()
Returns the number of times this thread has been in the {@link java.lang.Thread.State#BLOCKED} state. A thread enters this state when it is waiting to obtain an object's monitor. This may occur either on entering a synchronized method for the first time, or on re-entering it following a call to {@link java.lang.Object#wait()}.

Returns: the number of times this thread has been blocked.

getBlockedTime

public long getBlockedTime()

Returns the accumulated number of milliseconds this thread has been in the {@link java.lang.Thread.State#BLOCKED} state since thread contention monitoring was last enabled. A thread enters this state when it is waiting to obtain an object's monitor. This may occur either on entering a synchronized method for the first time, or on re-entering it following a call to {@link java.lang.Object#wait()}.

Use of this method requires virtual machine support for thread contention monitoring and for this support to be enabled.

Returns: the accumulated time (in milliseconds) that this thread has spent in the blocked state, since thread contention monitoring was enabled, or -1 if thread contention monitoring is disabled.

Throws: UnsupportedOperationException if the virtual machine does not support contention monitoring.

See Also: isThreadContentionMonitoringEnabled isThreadContentionMonitoringSupported

getLockedMonitors

public MonitorInfo[] getLockedMonitors()
Returns an array of {@link MonitorInfo} objects representing information on the locks on object monitors held by the thread. If no locks are held, or such information was not requested on creating this {@link ThreadInfo} object, a zero-length array will be returned.

Returns: information on object monitors locked by this thread.

getLockedSynchronizers

public LockInfo[] getLockedSynchronizers()
Returns an array of {@link LockInfo} objects representing information on the locks on ownable synchronizers held by the thread. If no locks are held, or such information was not requested on creating this {@link ThreadInfo} object, a zero-length array will be returned.

Returns: information on ownable synchronizers locked by this thread.

getLockInfo

public LockInfo getLockInfo()

Returns a {@link LockInfo} object representing the lock on which this thread is blocked. If the thread is not blocked, this method returns null.

The thread may be blocked due to one of three reasons:

  1. The thread is in the BLOCKED state waiting to acquire an object monitor in order to enter a synchronized method or block.
  2. The thread is in the WAITING or TIMED_WAITING state due to a call to {@link java.lang.Object#wait()}.
  3. The thread is in the WAITING or TIMED_WAITING state due to a call to {@link java.util.concurrent.locks.LockSupport#park()}. The lock is the return value of {@link java.util.concurrent.locks.LockSupport#getBlocker()}.

Returns: a {@link LockInfo} object representing the lock on which the thread is blocked, or null if the thread isn't blocked.

Since: 1.6

See Also: getLockName

getLockName

public String getLockName()

Returns a {@link java.lang.String} representation of the lock on which this thread is blocked. If the thread is not blocked, this method returns null.

The returned {@link java.lang.String} is constructed using the class name and identity hashcode (usually the memory address of the object) of the lock. The two are separated by the '@' character, and the identity hashcode is represented in hexadecimal. Thus, for a lock, l, the returned value is the result of concatenating l.getClass().getName(), "@" and Integer.toHexString(System.identityHashCode(l)). The value is only unique to the extent that the identity hash code is also unique. The value is the same as would be returned by getLockInfo().toString()

Returns: a string representing the lock on which this thread is blocked, or null if the thread is not blocked.

getLockOwnerId

public long getLockOwnerId()
Returns the identifier of the thread which owns the monitor lock this thread is waiting for. -1 is returned if either this thread is not blocked, or the lock is not held by any other thread.

Returns: the thread identifier of thread holding the lock this thread is waiting for, or -1 if the thread is not blocked or the lock is not held by another thread.

getLockOwnerName

public String getLockOwnerName()
Returns the name of the thread which owns the monitor lock this thread is waiting for. null is returned if either this thread is not blocked, or the lock is not held by any other thread.

Returns: the thread identifier of thread holding the lock this thread is waiting for, or null if the thread is not blocked or the lock is not held by another thread.

getStackTrace

public StackTraceElement[] getStackTrace()

Returns the stack trace of this thread to the depth specified on creation of this {@link ThreadInfo} object. If the depth is zero, an empty array will be returned. For non-zero arrays, the elements start with the most recent trace at position zero. The bottom of the stack represents the oldest method invocation which meets the depth requirements.

Some virtual machines may not be able to return stack trace information for a thread. In these cases, an empty array will also be returned.

Returns: an array of {@link java.lang.StackTraceElement}s representing the trace of this thread.

getThreadId

public long getThreadId()
Returns the identifier of the thread associated with this instance of {@link ThreadInfo}.

Returns: the thread's identifier.

getThreadName

public String getThreadName()
Returns the name of the thread associated with this instance of {@link ThreadInfo}.

Returns: the thread's name.

getThreadState

public Thread.State getThreadState()
Returns the state of the thread associated with this instance of {@link ThreadInfo}.

Returns: the thread's state.

getWaitedCount

public long getWaitedCount()
Returns the number of times this thread has been in the {@link java.lang.Thread.State#WAITING} or {@link java.lang.Thread.State#TIMED_WAITING} state. A thread enters one of these states when it is waiting due to a call to {@link java.lang.Object.wait()}, {@link java.lang.Object.join()} or {@link java.lang.concurrent.locks.LockSupport.park()}, either with an infinite or timed delay, respectively.

Returns: the number of times this thread has been waiting.

getWaitedTime

public long getWaitedTime()

Returns the accumulated number of milliseconds this thread has been in the {@link java.lang.Thread.State#WAITING} or {@link java.lang.Thread.State#TIMED_WAITING} state, since thread contention monitoring was last enabled. A thread enters one of these states when it is waiting due to a call to {@link java.lang.Object.wait()}, {@link java.lang.Object.join()} or {@link java.lang.concurrent.locks.LockSupport.park()}, either with an infinite or timed delay, respectively.

Use of this method requires virtual machine support for thread contention monitoring and for this support to be enabled.

Returns: the accumulated time (in milliseconds) that this thread has spent in one of the waiting states, since thread contention monitoring was enabled, or -1 if thread contention monitoring is disabled.

Throws: UnsupportedOperationException if the virtual machine does not support contention monitoring.

See Also: isThreadContentionMonitoringEnabled isThreadContentionMonitoringSupported

isInNative

public boolean isInNative()
Returns true if the thread is in a native method. This excludes native code which forms part of the virtual machine itself, or which results from Just-In-Time compilation.

Returns: true if the thread is in a native method, false otherwise.

isSuspended

public boolean isSuspended()
Returns true if the thread has been suspended using {@link java.lang.Thread#suspend()}.

Returns: true if the thread is suspended, false otherwise.

toString

public String toString()
Returns a {@link java.lang.String} representation of this {@link ThreadInfo} object. This takes the form java.lang.management.ThreadInfo[id=tid, name=n, state=s, blockedCount=bc, waitedCount=wc, isInNative=iin, isSuspended=is], where tid is the thread identifier, n is the thread name, s is the thread state, bc is the blocked state count, wc is the waiting state count and iin and is are boolean flags to indicate the thread is in native code or suspended respectively. If the thread is blocked, lock=l, lockOwner=lo is also included, where l is the lock waited for, and lo is the thread which owns the lock (or null if there is no owner).

Returns: the string specified above.