001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: * The Original Software is NetBeans. The Initial Developer of the Original
026: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
027: * Microsystems, Inc. All Rights Reserved.
028: *
029: * If you wish your version of this file to be governed by only the CDDL
030: * or only the GPL Version 2, indicate your decision by adding
031: * "[Contributor] elects to include this software in this distribution
032: * under the [CDDL or GPL Version 2] license." If you do not indicate a
033: * single choice of license, a recipient has the option to distribute
034: * your version of this file under either the CDDL, the GPL Version 2 or
035: * to extend the choice of license to its licensees as provided above.
036: * However, if you add GPL Version 2 code and therefore, elected the GPL
037: * Version 2 license, then the option applies only if the new code is
038: * made subject to such option by the copyright holder.
039: */
040:
041: package org.netbeans.lib.profiler.server.system;
042:
043: /**
044: * Provides methods for accessing various information related to threads.
045: *
046: * @author Misha Dmitriev
047: */
048: public class Threads {
049: //~ Methods ------------------------------------------------------------------------------------------------------------------
050:
051: /**
052: * Returns all live Java threads in this JVM. If the number of threads fits into the threads array, it is reused
053: * (unused elements are filled with nulls). Otherwise, or if threads is null, a new array is created.
054: */
055: public static native Thread[] getAllThreads(Thread[] threads);
056:
057: //----------------- Miscellaneous
058: public static native String getJVMArguments();
059:
060: public static native String getJavaCommand();
061:
062: /** For each passed thread, stores its status as defined in CommonConstants, in the status array. threads may contain nulls. */
063: public static native void getThreadsStatus(Thread[] threads,
064: int[] status);
065:
066: /** Returns the total number of live Java threads. */
067: public static native int getTotalNumberOfThreads();
068:
069: /** Should be called at earliest possible time */
070: public static void initialize() {
071: // Doesn't do anything in this version
072: }
073:
074: /**
075: * Records a given thread as a profiler's own thread, so that targetAppTreadsExist() does not treat it as a
076: * target app thread. Note that the current implementation allows only one additional profiler thread; if this
077: * is called more than once, only the latest thread is remembered.
078: */
079: public static native void recordAdditionalProfilerOwnThread(
080: Thread specialThread);
081:
082: /**
083: * Record profiler's own threads. If excludeSpecialThread is true, recocrd all the Java threads currently existing
084: * in this JVM, minus specialThread. Otherwise, record only the specialThread. Returns the number of recorded threads.
085: */
086: public static native int recordProfilerOwnThreads(
087: boolean excludeSpecialThread, Thread specialThread);
088:
089: public static synchronized native void resumeTargetAppThreads(
090: Thread excludedThread);
091:
092: public static synchronized native void suspendTargetAppThreads(
093: Thread excludedThread);
094:
095: /**
096: * Checks if any live target application threads still exist. A target application thread is any thread not recorded
097: * previously by recordProfilerOwnThreads() or recordAdditionalProfilerOwnThread().
098: */
099: public static native boolean targetAppThreadsExist();
100:
101: public static void terminateTargetAppThreads() {
102: terminateTargetAppThreads(new ThreadDeath());
103: }
104:
105: public static native void terminateTargetAppThreads(Object exception);
106: }
|