JavaTM 2 Platform
Standard Ed. 5.0

java.lang.management
インタフェース ThreadMXBean


public interface ThreadMXBean

Java 仮想マシンのスレッドシステムの管理インタフェースです。

Java 仮想マシンは、このインタフェースの実装クラスの単一インスタンスを持ちます。このインタフェースを実装しているインスタンスは、ManagementFactory.getThreadMXBean() メソッドを呼び出して取得できる、あるいは platform MBeanServer メソッドから取得できる MXBean です。

MBeanServer 内でスレッドシステムの MXBean を一意に識別するための ObjectName は以下のとおりです。

java.lang:type=Threading

スレッド ID

スレッド ID は、スレッドの Thread.getId() メソッドの呼び出しにより返された正の long 型の値です。スレッド ID は一意であり、その寿命を通じて変更されることはありません。スレッドが終了すると、スレッド ID は再利用可能です。

このインタフェースの一部のメソッドは、入力パラメータとしてスレッド ID またはスレッド ID の配列を取得してスレッドごとの情報を返します。

スレッド CPU 時間

Java 仮想マシンの実装では、任意のスレッドやスレッド以外について、現在のスレッドの CPU 時間の測定をサポートできます。

isThreadCpuTimeSupported() メソッドを使って、Java 仮想マシンが任意のスレッドについて CPU 時間の測定をサポートするかどうかを判定できます。また、isCurrentThreadCpuTimeSupported() メソッドを使って、Java 仮想マシンが現在のスレッドの CPU 時間の測定をサポートしているかどうかを判定できます。任意のスレッドの CPU 時間の測定をサポートしている Java 仮想マシンの実装は、現在のスレッドの CPU 時間の測定もサポートしています。

このインタフェースで提供された CPU 時間は、ナノ秒単位の精度を提供しますが、必ずしもナノ秒の正確度ではありません。

Java 仮想マシンでは、デフォルトで CPU 時間の測定を無効にできます。isThreadCpuTimeEnabled() メソッドと setThreadCpuTimeEnabled(boolean) メソッドを使って、CPU 時間測定が有効になっていることをテストしたり、測定のサポートを有効または無効にしたりすることができます。スレッド CPU 測定を有効にすると、一部の Java 仮想マシンの実装では、負荷が大きくなる可能性があります。

スレッドコンテンション監視

一部の Java 仮想マシンは、スレッドコンテンション監視をサポートします。isThreadContentionMonitoringSupported() メソッドを使って、Java 仮想マシンがスレッドコンテンション監視をサポートしているかどうかを判定できます。 スレッドコンテンション監視はデフォルトで無効です。setThreadContentionMonitoringEnabled(boolean) メソッドを使って、スレッドコンテンション監視を有効にすることができます。

導入されたバージョン:
1.5
関連項目:
JMX Specification, Ways to Access MXBeans

メソッドの概要
 long[] findMonitorDeadlockedThreads()
          オブジェクトモニターの取得を待機していてデッドロック状態にあるスレッドのサイクルを検索します。
 long[] getAllThreadIds()
          すべてのライブスレッドの ID を返します。
 long getCurrentThreadCpuTime()
          現在のスレッドの合計 CPU 時間をナノ秒単位で返します。
 long getCurrentThreadUserTime()
          現在のスレッドがユーザモードで実行した CPU 時間 (ナノ秒単位) を返します。
 int getDaemonThreadCount()
          ライブデーモンスレッドの現在の数を返します。
 int getPeakThreadCount()
          Java 仮想マシンが起動された以降の、またはピークがリセットされた以降の、ピークライブスレッドカウントを返します。
 int getThreadCount()
          デーモンスレッドとデーモン以外のスレッドを含むライブスレッドの現在の数を返します。
 long getThreadCpuTime(long id)
          指定された ID のスレッドの合計 CPU 時間 (ナノ秒単位) を返します。
 ThreadInfo getThreadInfo(long id)
          スタックトレースを持たない指定された id のスレッドのスレッド情報を返します。
 ThreadInfo[] getThreadInfo(long[] ids)
          スタックトレースを持たない入力配列 ids にある ID を持つスレッドごとのスレッド情報を返します。
 ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)
          入力配列 ids に ID を持つ各スレッドのスレッド情報を返します。
 ThreadInfo getThreadInfo(long id, int maxDepth)
          指定された id のスレッドのスレッド情報を返します。
 long getThreadUserTime(long id)
          指定された ID のスレッドがユーザモードで実行した CPU 時間 (ナノ秒単位) を返します。
 long getTotalStartedThreadCount()
          Java 仮想マシンが起動してから作成および起動されたスレッドの合計数を返します。
 boolean isCurrentThreadCpuTimeSupported()
          Java 仮想マシンが現在のスレッドの CPU 時間測定をサポートするかどうかをテストします。
 boolean isThreadContentionMonitoringEnabled()
          スレッドコンテンション監視が有効かどうかをテストします。
 boolean isThreadContentionMonitoringSupported()
          Java 仮想マシンがスレッドコンテンション監視をサポートするかどうかをテストします。
 boolean isThreadCpuTimeEnabled()
          スレッドの CPU 時間測定が有効かどうかをテストします。
 boolean isThreadCpuTimeSupported()
          Java 仮想マシンの実装が任意のスレッドの CPU 時間測定をサポートするかどうかをテストします。
 void resetPeakThreadCount()
          ピークスレッドカウントをライブスレッドの現在の数にリセットします。
 void setThreadContentionMonitoringEnabled(boolean enable)
          スレッドコンテンション監視を有効または無効にします。
 void setThreadCpuTimeEnabled(boolean enable)
          スレッドの CPU 時間測定を有効または無効にします。
 

メソッドの詳細

getThreadCount

int getThreadCount()
デーモンスレッドとデーモン以外のスレッドを含むライブスレッドの現在の数を返します。

戻り値:
ライブスレッドの現在の数

getPeakThreadCount

int getPeakThreadCount()
Java 仮想マシンが起動された以降の、またはピークがリセットされた以降の、ピークライブスレッドカウントを返します。

戻り値:
ピークライブスレッドカウント

getTotalStartedThreadCount

long getTotalStartedThreadCount()
Java 仮想マシンが起動してから作成および起動されたスレッドの合計数を返します。

戻り値:
起動されたスレッドの合計数

getDaemonThreadCount

int getDaemonThreadCount()
ライブデーモンスレッドの現在の数を返します。

戻り値:
ライブデーモンスレッドの現在の数

getAllThreadIds

long[] getAllThreadIds()
すべてのライブスレッドの ID を返します。返された配列に含まれる一部のスレッドは、このメソッドが値を返したときに終了していた可能性があります。

戻り値:
スレッド ID を含む long 型の配列
例外:
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合

getThreadInfo

ThreadInfo getThreadInfo(long id)
スタックトレースを持たない指定された id のスレッドのスレッド情報を返します。このメソッドは、以下を呼び出すのと同等です。
getThreadInfo(id, 0);

このメソッドは、指定された ID のスレッドに関するスレッド情報を表す ThreadInfo オブジェクトを返します。返された ThreadInfo オブジェクトのスタックトレースは、StackTraceElement の空の配列になります。 指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは null を返します。指定された ID が起動され、生存している場合、スレッドは生存しています。

MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo で指定された属性を持つ CompositeData です。

パラメータ:
id - スレッドのスレッド ID。正の値でなければならない
戻り値:
スタックトレースを持たない指定された ID のスレッドに関する ThreadInfo オブジェクト。指定された ID のスレッドが生存または存在していない場合は null
例外:
IllegalArgumentException - id <= 0 の場合
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合

getThreadInfo

ThreadInfo[] getThreadInfo(long[] ids)
スタックトレースを持たない入力配列 ids にある ID を持つスレッドごとのスレッド情報を返します。このメソッドは、以下を呼び出すのと同等です。
 getThreadInfo(ids, 0);
 

このメソッドは、ThreadInfo オブジェクトの配列を返します。各 ThreadInfo オブジェクトのスタックトレースは、StackTraceElement の空の配列になります。 指定された ID のスレッドが生存していないか、存在していない場合、返された配列の対応する要素は、null を含みます。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。

MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo で指定された属性を持つ CompositeData です。

パラメータ:
ids - スレッド ID の配列
戻り値:
ID の入力配列の対応する要素に ID があるスレッドの情報を含む ThreadInfo オブジェクトの配列
例外:
IllegalArgumentException - 入力配列 ids の要素が <= 0 である場合
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合

getThreadInfo

ThreadInfo getThreadInfo(long id,
                         int maxDepth)
指定された id のスレッドのスレッド情報を返します。maxDepth パラメータは、スタックトレースから取得される StackTraceElement の最大数を示します。maxDepth == Integer.MAX_VALUE の場合、スレッドのスタックトレース全体がダンプされます。maxDepth == 0 の場合、スレッドのスタックトレースはダンプされません。

Java 仮想マシンがスレッドのスタックトレース情報を持たない場合、または maxDepth == 0 の場合、ThreadInfo オブジェクトのスタックトレースは StackTraceElement の空の配列になります。

指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは null を返します。指定された ID が起動され、生存している場合、スレッドは生存しています。

MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo で指定された属性を持つ CompositeData です。

パラメータ:
id - スレッドのスレッド ID。正の値でなければならない
maxDepth - ダンプされるスタックトレースのエントリの最大数。Integer.MAX_VALUE を使って、スタック全体をダンプするよう要求できる
戻り値:
指定された ID のスレッドの ThreadInfo。指定された ID のスレッドが生存または存在していない場合は null
例外:
IllegalArgumentException - id <= 0 の場合
IllegalArgumentException - maxDepth is negative の場合
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合

getThreadInfo

ThreadInfo[] getThreadInfo(long[] ids,
                           int maxDepth)
入力配列 ids に ID を持つ各スレッドのスレッド情報を返します。maxDepth パラメータは、スタックトレースから取得される StackTraceElement の最大数を示します。maxDepth == Integer.MAX_VALUE の場合、スレッドのスタックトレース全体がダンプされます。maxDepth == 0 の場合、スレッドのスタックトレースはダンプされません。

Java 仮想マシンがスレッドのスタックトレース情報を持たない場合、または maxDepth == 0 の場合、ThreadInfo オブジェクトのスタックトレースは StackTraceElement の空の配列になります。

このメソッドは、ThreadInfo オブジェクトの配列を返します。配列の各要素は、ids 配列と同じインデックスを持つスレッドに関するスレッド情報です。指定された ID のスレッドが生存していないか、存在しない場合、返される配列の対応する要素に null が設定されます。指定されたスレッド ID が起動されたか生存している場合、スレッドは生存しています。

MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo で指定された属性を持つ CompositeData です。

パラメータ:
ids - スレッド ID の配列
maxDepth - ダンプされるスタックトレースのエントリの最大数。Integer.MAX_VALUE を使って、スタック全体をダンプするよう要求できる
戻り値:
ID の入力配列の対応する要素に ID があるスレッドの情報を含む ThreadInfo オブジェクトの配列
例外:
IllegalArgumentException - maxDepth is negative の場合
IllegalArgumentException - 入力配列 ids の要素が <= 0 である場合
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合

isThreadContentionMonitoringSupported

boolean isThreadContentionMonitoringSupported()
Java 仮想マシンがスレッドコンテンション監視をサポートするかどうかをテストします。

戻り値:
Java 仮想マシンがスレッドコンテンション監視をサポートする場合は true。そうでない場合は false

isThreadContentionMonitoringEnabled

boolean isThreadContentionMonitoringEnabled()
スレッドコンテンション監視が有効かどうかをテストします。

戻り値:
スレッドコンテンション監視が有効な場合は true、そうでない場合は false
例外:
UnsupportedOperationException - Java 仮想マシンがスレッドコンテンション監視をサポートしない場合
関連項目:
isThreadContentionMonitoringSupported()

setThreadContentionMonitoringEnabled

void setThreadContentionMonitoringEnabled(boolean enable)
スレッドコンテンション監視を有効または無効にします。スレッドコンテンション監視はデフォルトで無効に設定されています。

パラメータ:
enable - 有効にする場合は true、無効にする場合は false
例外:
UnsupportedOperationException - Java 仮想マシンがスレッドコンテンション監視をサポートしない場合
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("control") を持たない場合
関連項目:
isThreadContentionMonitoringSupported()

getCurrentThreadCpuTime

long getCurrentThreadCpuTime()
現在のスレッドの合計 CPU 時間をナノ秒単位で返します。返された値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。実装がユーザモード時とシステムモード時を区別する場合、返される CPU 時間は、ユーザモードまたはシステムモードで現在のスレッドが実行した時間の合計です。

このメソッドは、ローカル管理で使用する簡易メソッドであり、以下を呼び出すのと同等です。

 getThreadCpuTime(Thread.currentThread().getId());
 

戻り値:
CPU 時間測定が有効な場合、現在のスレッドの合計 CPU 時間。そうでない場合は -1
例外:
UnsupportedOperationException - Java 仮想マシンが現在のスレッドの CPU 時間測定をサポートしない場合
関連項目:
getCurrentThreadUserTime(), isCurrentThreadCpuTimeSupported(), isThreadCpuTimeEnabled(), setThreadCpuTimeEnabled(boolean)

getCurrentThreadUserTime

long getCurrentThreadUserTime()
現在のスレッドがユーザモードで実行した CPU 時間 (ナノ秒単位) を返します。返される値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。

このメソッドは、ローカル管理で使用する簡易メソッドであり、以下を呼び出すのと同等です。

 getThreadUserTime(Thread.currentThread().getId());
 

戻り値:
CPU 時間測定が有効な場合、現在のスレッドのユーザレベルの CPU 時間。そうでない場合は -1
例外:
UnsupportedOperationException - Java 仮想マシンが現在のスレッドの CPU 時間測定をサポートしない場合
関連項目:
getCurrentThreadCpuTime(), isCurrentThreadCpuTimeSupported(), isThreadCpuTimeEnabled(), setThreadCpuTimeEnabled(boolean)

getThreadCpuTime

long getThreadCpuTime(long id)
指定された ID のスレッドの合計 CPU 時間 (ナノ秒単位) を返します。返される値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。実装がユーザモード時とシステムモード時を区別する場合、返される CPU 時間は、ユーザモードまたはシステムモードでそのスレッドが実行した時間の合計です。

指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは -1 を返します。CPU 時間測定が無効の場合、このメソッドは -1 を返します。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。

スレッドが起動されたあとに CPU 時間測定が有効になった場合、Java 仮想マシンの実装では、CPU 時間測定が起動されたポイントとして CPU 時間測定機能が有効になった時間以前の任意の時間を選択できます。

パラメータ:
id - スレッドのスレッド ID
戻り値:
指定された ID のスレッドが存在し、生存していて、CPU 時間測定が有効な場合は、指定された ID のスレッドの合計 CPU 時間。そうでない場合は -1
例外:
IllegalArgumentException - id <= 0 の場合
UnsupportedOperationException - Java 仮想マシンがほかのスレッドの CPU 時間測定をサポートしない場合
関連項目:
getThreadUserTime(long), isThreadCpuTimeSupported(), isThreadCpuTimeEnabled(), setThreadCpuTimeEnabled(boolean)

getThreadUserTime

long getThreadUserTime(long id)
指定された ID のスレッドがユーザモードで実行した CPU 時間 (ナノ秒単位) を返します。返される値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。

指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは -1 を返します。CPU 時間測定が無効の場合、このメソッドは -1 を返します。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。

スレッドが起動されたあとに CPU 時間測定が有効になった場合、Java 仮想マシンの実装では、CPU 時間測定が起動されたポイントとして CPU 時間測定機能が有効になった時間以前の任意の時間を選択できます。

パラメータ:
id - スレッドのスレッド ID
戻り値:
指定された ID のスレッドが存在し、生存していて、CPU 時間測定が有効な場合は、指定された ID のスレッドのユーザレベルの CPU 時間。そうでない場合は -1
例外:
IllegalArgumentException - id <= 0 の場合
UnsupportedOperationException - Java 仮想マシンがほかのスレッドの CPU 時間測定をサポートしない場合
関連項目:
getThreadCpuTime(long), isThreadCpuTimeSupported(), isThreadCpuTimeEnabled(), setThreadCpuTimeEnabled(boolean)

isThreadCpuTimeSupported

boolean isThreadCpuTimeSupported()
Java 仮想マシンの実装が任意のスレッドの CPU 時間測定をサポートするかどうかをテストします。任意のスレッドの CPU 時間測定をサポートする Java 仮想マシンの実装は現在のスレッドの CPU 時間測定もサポートします。

戻り値:
Java 仮想マシンが任意のスレッドの CPU 時間測定をサポートする場合は true。そうでない場合は false

isCurrentThreadCpuTimeSupported

boolean isCurrentThreadCpuTimeSupported()
Java 仮想マシンが現在のスレッドの CPU 時間測定をサポートするかどうかをテストします。isThreadCpuTimeSupported()true を返す場合、このメソッドは true を返します。

戻り値:
Java 仮想マシンが現在のスレッドの CPU 時間測定をサポートする場合は true。そうでない場合は false

isThreadCpuTimeEnabled

boolean isThreadCpuTimeEnabled()
スレッドの CPU 時間測定が有効かどうかをテストします。

戻り値:
スレッドの CPU 時間測定が有効な場合は true、そうでない場合は false
例外:
UnsupportedOperationException - Java 仮想マシンがほかのスレッドばかりでなく現在のスレッドの CPU 時間測定もサポートしない場合
関連項目:
isThreadCpuTimeSupported(), isCurrentThreadCpuTimeSupported()

setThreadCpuTimeEnabled

void setThreadCpuTimeEnabled(boolean enable)
スレッドの CPU 時間測定を有効または無効にします。デフォルトの設定はプラットフォームに応じて異なります。

パラメータ:
enable - 有効にする場合は true、無効にする場合は false
例外:
UnsupportedOperationException - Java 仮想マシンが任意のスレッドばかりでなく現在のスレッドの CPU 時間測定もサポートしない場合
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("control") を持たない場合
関連項目:
isThreadCpuTimeSupported(), isCurrentThreadCpuTimeSupported()

findMonitorDeadlockedThreads

long[] findMonitorDeadlockedThreads()
オブジェクトモニターの取得を待機していてデッドロック状態にあるスレッドのサイクルを検索します。つまり、スレッドはブロックされ、同期ブロックに入るのを待機しているか、Object.wait 呼び出しのあと、同期ブロックに再入するのを待機しています。ここでは、サイクル中の別のスレッドにより保持されている別のモニターの取得を試行している間、各スレッドは 1 つのモニターを保有しています。

公式には、スレッドが、「ほかのスレッドにより保有されるオブジェクトモニターを待機している」関係にあるサイクルの一部である場合、スレッドは「モニターデッドロック」されます。もっとも簡単なケースについて説明すると、スレッド A は、スレッド B が所有するモニターを待機するのをブロックされ、スレッド B はスレッド A が所有するモニターを待機するのをブロックされます。

このメソッドはトラブルシューティングのために設計されていますが、同期制御のためのものではありません。このメソッドの操作は負荷が大きくなる可能性があります。

戻り値:
モニターデッドロックされているスレッドの ID の配列。そうでない場合は null
例外:
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合

resetPeakThreadCount

void resetPeakThreadCount()
ピークスレッドカウントをライブスレッドの現在の数にリセットします。

例外:
SecurityException - セキュリティマネージャが存在する場合で、呼び出し元が ManagementPermission("control") を持たない場合
関連項目:
getPeakThreadCount(), getThreadCount()

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。