/* * @(#)ThreadInfo.java 1.16 04/04/18 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.lang.management; import javax.management.openmbean.CompositeData; import sun.management.ThreadInfoCompositeData; /** * Thread information. ThreadInfo contains the information * about a thread including: *
This thread information class is designed for use in monitoring of * the system, not for synchronization control. * *
The Java virtual machine may measure the time with a high * resolution timer. This statistic is reset when * the thread contention monitoring is reenabled. * * @return the approximate accumulated elapsed time in milliseconds * that a thread entered the BLOCKED state; * -1 if thread contention monitoring is disabled. * * @throws java.lang.UnsupportedOperationException if the Java * virtual machine does not support this operation. * * @see ThreadMXBean#isThreadContentionMonitoringSupported * @see ThreadMXBean#setThreadContentionMonitoringEnabled */ public long getBlockedTime() { return blockedTime; } /** * Returns the total number of times that * the thread associated with this ThreadInfo * blocked to enter or reenter a monitor. * I.e. the number of times a thread has been in the * {@link java.lang.Thread.State#BLOCKED BLOCKED} state. * * @return the total number of times that the thread * entered the BLOCKED state. */ public long getBlockedCount() { return blockedCount; } /** * Returns the approximate accumulated elapsed time (in milliseconds) * that the thread associated with this ThreadInfo * has waited for notification * since thread contention monitoring is enabled. * I.e. the total accumulated time the thread has been in the * {@link java.lang.Thread.State#WAITING WAITING} * or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state * since thread contention monitoring is enabled. * This method returns -1 if thread contention monitoring * is disabled. * *
The Java virtual machine may measure the time with a high * resolution timer. This statistic is reset when * the thread contention monitoring is reenabled. * * @return the approximate accumulated elapsed time in milliseconds * that a thread has been in the WAITING or * TIMED_WAITING state; * -1 if thread contention monitoring is disabled. * * @throws java.lang.UnsupportedOperationException if the Java * virtual machine does not support this operation. * * @see ThreadMXBean#isThreadContentionMonitoringSupported * @see ThreadMXBean#setThreadContentionMonitoringEnabled */ public long getWaitedTime() { return waitedTime; } /** * Returns the total number of times that * the thread associated with this ThreadInfo * waited for notification. * I.e. the number of times that a thread has been * in the {@link java.lang.Thread.State#WAITING WAITING} * or {@link java.lang.Thread.State#TIMED_WAITING TIMED_WAITING} state. * * @return the total number of times that the thread * was in the WAITING or TIMED_WAITING state. */ public long getWaitedCount() { return waitedCount; } /** * Returns the string representation of the monitor lock that * the thread associated with this ThreadInfo * is blocked to enter or waiting to be notified through * the {@link Object#wait Object.wait} method. * The returned string representation of a monitor lock consists of * the name of the class of which the object is an instance, the * at-sign character `@', and the unsigned hexadecimal representation * of the identity hash code of the object. * The returned string may not * be unique depending on the implementation of the * {@link System#identityHashCode} method. * This method returns a string equals to the value of: *
** where lock is the monitor lock object. * ** lock.getClass().getName() + '@' + Integer.toHexString(System.identityHashCode(lock)) *
If the thread is not blocking to enter on any monitor object, * or is not waiting on a monitor object for notification in a * Object.wait call, * this method returns null. * * @return the string representation of the monitor lock that * the thread is blocking to enter or waiting to be notified through * the Object.wait method if any; * null otherwise. * */ public String getLockName() { return lockName; } /** * Returns the ID of the thread which holds the monitor lock of an object * on which the thread associated with this ThreadInfo * is blocking. * This method will return -1 if this thread is not blocked * or waiting on any monitor, or if the monitor lock is not held * by any thread. * * @return the thread ID of the owner thread of the monitor lock of the * object this thread is blocking on; * -1 if this thread is not blocked * or waiting on any monitor, or if the monitor lock is not held * by any thread. * * @see #getLockName */ public long getLockOwnerId() { return lockOwnerId; } /** * Returns the name of the thread which holds the monitor lock of an object * on which the thread associated with this ThreadInfo * is blocking. * This method will return null if this thread is not blocked * or waiting on any monitor, or if the monitor lock is not held * by any thread. * * @return the name of the thread that holds the monitor lock of the object * this thread is blocking on; * null if this thread is not blocked * or waiting on any monitor, or if the monitor lock is not held * by any thread. * * @see #getLockName */ public String getLockOwnerName() { return lockOwnerName; } /** * Returns the stack trace of the thread * associated with this ThreadInfo. * If no stack trace was requested for this thread info, this method * will return a zero-length array. * If the returned array is of non-zero length then the first element of * the array represents the top of the stack, which is the most recent * method invocation in the sequence. The last element of the array * represents the bottom of the stack, which is the least recent method * invocation in the sequence. * *
Some Java virtual machines may, under some circumstances, omit one * or more stack frames from the stack trace. In the extreme case, * a virtual machine that has no stack trace information concerning * the thread associated with this ThreadInfo * is permitted to return a zero-length array from this method. * * @return an array of StackTraceElement objects of the thread. */ public StackTraceElement[] getStackTrace() { if (stackTrace == null) { return NO_STACK_TRACE; } else { return stackTrace; } } /** * Tests if the thread associated with this ThreadInfo * is suspended. This method returns true if * {@link Thread#suspend} has been called. * * @return true if the thread is suspended; * false otherwise. */ public boolean isSuspended() { return suspended; } /** * Tests if the thread associated with this ThreadInfo * is executing native code via the Java Native Interface (JNI). * The JNI native code does not include * the virtual machine support code or the compiled native * code generated by the virtual machine. * * @return true if the thread is executing native code; * false otherwise. */ public boolean isInNative() { return inNative; } /** * Returns a string representation of this thread info. * * @return a string representation of this thread info. */ public String toString() { return "Thread " + getThreadName() + " (Id = " + getThreadId() + ") " + getThreadState() + " " + getLockName(); } /** * Returns a ThreadInfo object represented by the * given CompositeData. * The given CompositeData must contain the following attributes: *
** * @param cd CompositeData representing a ThreadInfo * * @throws IllegalArgumentException if cd does not * represent a ThreadInfo with the attributes described * above. * @return a ThreadInfo object represented * by cd if cd is not null; * null otherwise. */ public static ThreadInfo from(CompositeData cd) { if (cd == null) { return null; } if (cd instanceof ThreadInfoCompositeData) { return ((ThreadInfoCompositeData) cd).getThreadInfo(); } else { return new ThreadInfo(cd); } } private static final StackTraceElement[] NO_STACK_TRACE = new StackTraceElement[0]; }*
** *Attribute Name *Type ** *threadId *java.lang.Long ** *threadName *java.lang.String ** *threadState *java.lang.String ** *suspended *java.lang.Boolean ** *inNative *java.lang.Boolean ** *blockedCount *java.lang.Long ** *blockedTime *java.lang.Long ** *waitedCount *java.lang.Long ** *waitedTime *java.lang.Long ** *lockName *java.lang.String ** *lockOwnerId *java.lang.Long ** *lockOwnerName *java.lang.String ** *stackTrace *javax.management.openmbean.CompositeData[] * ** Each element is a CompositeData representing * StackTraceElement containing the following attributes: *
***
** *Attribute Name *Type ** *className *java.lang.String ** *methodName *java.lang.String ** *fileName *java.lang.String ** *lineNumber *java.lang.Integer ** *nativeMethod *java.lang.Boolean *