/* TestThread.java -- Tests the thread bean. Copyright (C) 2006 Free Software Foundation, Inc. This file is part of GNU Classpath examples. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package gnu.classpath.examples.management; import java.lang.management.ManagementFactory; import java.lang.management.ThreadInfo; import java.lang.management.ThreadMXBean; import java.util.Arrays; public class TestThread { public static void main(String[] args) { ThreadMXBean bean = ManagementFactory.getThreadMXBean(); System.out.println("Bean: " + bean); System.out.println("Monitor deadlocked threads: " + bean.findMonitorDeadlockedThreads()); long[] ids = bean.getAllThreadIds(); System.out.println("Live thread ids: " + Arrays.toString(ids)); boolean currentTimeMonitoring = bean.isCurrentThreadCpuTimeSupported(); System.out.println("Current thread CPU time monitoring supported: " + currentTimeMonitoring); if (currentTimeMonitoring) { boolean timeEnabled = bean.isThreadCpuTimeEnabled(); System.out.println("Is time monitoring enabled... " + (timeEnabled ? "yes" : "no")); if (!timeEnabled) { System.out.println("Enabling..."); bean.setThreadCpuTimeEnabled(true); timeEnabled = bean.isThreadCpuTimeEnabled(); System.out.println("Should now be enabled... " + (timeEnabled ? "yes" : "no")); } if (timeEnabled) { System.out.println("Current thread CPU time: " + bean.getCurrentThreadCpuTime() + "ns"); System.out.println("Current thread user time: " + bean.getCurrentThreadUserTime() + "ns"); } } System.out.println("Daemon thread count: " + bean.getDaemonThreadCount()); System.out.println("Peak thread count: " + bean.getPeakThreadCount()); System.out.println("Resetting..."); bean.resetPeakThreadCount(); System.out.println("Peak thread count: " + bean.getPeakThreadCount()); System.out.println("Thread count: " + bean.getThreadCount()); boolean timeMonitoring = bean.isThreadCpuTimeSupported(); System.out.println("Thread CPU time monitoring supported: " + timeMonitoring); if (timeMonitoring) { for (int a = 0; a < ids.length; ++a) { System.out.println("Thread " + a + " CPU time: " + bean.getThreadCpuTime(ids[a]) + "ns"); System.out.println("Thread " + a + " user time: " + bean.getThreadUserTime(ids[a]) + "ns"); } } System.out.println("Current thread info: " + bean.getThreadInfo(Thread.currentThread().getId())); System.out.println("All thread info: " + Arrays.toString(bean.getThreadInfo(ids))); System.out.println("Total started threads: " + bean.getTotalStartedThreadCount()); boolean contentionMonitoring = bean.isThreadContentionMonitoringSupported(); System.out.println("Thread contention monitoring supported: " + contentionMonitoring); if (contentionMonitoring) { boolean contentionEnabled = bean.isThreadContentionMonitoringEnabled(); System.out.println("Thread contention monitoring shouldn't be enabled... " + (contentionEnabled ? "but it is" : "true")); if (!contentionEnabled) { System.out.println("Enabling..."); bean.setThreadContentionMonitoringEnabled(true); contentionEnabled = bean.isThreadContentionMonitoringEnabled(); System.out.println("Should now be enabled... " + (contentionEnabled ? "it is" : "nope")); } if (contentionEnabled) { ThreadInfo[] info = bean.getThreadInfo(ids); for (int a = 0; a < info.length; ++a) { System.out.println("Blocked time for thread " + info[a].getThreadId() + ": " + info[a].getBlockedTime() + "ms"); System.out.println("Waited time for thread " + info[a].getThreadId() + ": " + info[a].getWaitedTime() + "ms"); } } } } }