public interface ThreadMXBean extends PlatformManagedObject
Java 仮想マシンは、このインタフェースの実装クラスの単一インスタンスを持ちます。このインタフェースを実装したこのインスタンスは MXBean ですが、これを取得するには、ManagementFactory.getThreadMXBean()
メソッドを呼び出すか、platform MBeanServer
のメソッドを使用します。
MBeanServer 内でスレッドシステムの MXBean を一意に識別するための ObjectName は次のとおりです。
java.lang:type=Threading
これを取得するには、PlatformManagedObject.getObjectName()
メソッドを呼び出します。
Thread.getId()
メソッドの呼び出しにより返された正の long 型の値です。スレッド ID は一意であり、その寿命を通じて変更されることはありません。スレッドが終了すると、スレッド ID は再利用可能です。
このインタフェースの一部のメソッドは、入力パラメータとしてスレッド ID またはスレッド ID の配列を取得してスレッドごとの情報を返します。
isThreadCpuTimeSupported()
メソッドを使用すると、Java 仮想マシンで任意のスレッドの CPU 時間を測定できるかどうかを判定できます。isCurrentThreadCpuTimeSupported()
メソッドを使用すると、Java 仮想マシンが現在のスレッドの CPU 時間の測定をサポートしているかどうかを判定できます。任意のスレッドの CPU 時間測定をサポートする Java 仮想マシンの実装は現在のスレッドの CPU 時間測定もサポートします。
このインタフェースで発生する CPU 時間は、その単位の精度がナノ秒となっていますが、ここではこれほどの精度は要求されません。
Java 仮想マシンでは、デフォルトで CPU 時間の測定を無効にできます。isThreadCpuTimeEnabled()
および setThreadCpuTimeEnabled(boolean)
メソッドを使って、CPU 時間測定が有効になっているかどうかをテストしたり、測定のサポートを有効または無効にしたりすることができます。スレッド CPU 測定を有効にすると、一部の Java 仮想マシンの実装では、負荷が大きくなる可能性があります。
isThreadContentionMonitoringSupported()
メソッドを使って、Java 仮想マシンがスレッドコンテンション監視をサポートしているかどうかを判定できます。スレッドコンテンション監視はデフォルトで無効です。setThreadContentionMonitoringEnabled(boolean)
メソッドを使って、スレッドコンテンション監視を有効にすることができます。
getThreadInfo(long[], boolean, boolean)
メソッドと dumpAllThreads(boolean, boolean)
メソッドを使用すると、スレッドのスタックトレースと同期情報 (スレッドが取得をブロックされているまたは待機しているロックに関して、スレッドが現在所有しているロックに関してなど) を取得できます。
ThreadMXBean インタフェースは、実行中のアプリケーションのデッドロックを見つけるための findMonitorDeadlockedThreads()
メソッドおよび findDeadlockedThreads()
メソッドを提供します。
ManagementFactory.getPlatformMXBeans(Class)
, JMX 仕様, MXBean にアクセスする方法修飾子と型 | メソッドと説明 |
---|---|
ThreadInfo[] |
dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
スタックトレースおよび同期情報を持つすべてのライブスレッドのスレッド情報を返します。
|
long[] |
findDeadlockedThreads()
オブジェクトモニターまたは所有可能なシンクロナイザの取得を待機していてデッドロック状態にあるスレッドのサイクルを検索します。
|
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, boolean lockedMonitors, boolean lockedSynchronizers)
スタックトレースおよび同期情報を持つ入力配列 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 |
isObjectMonitorUsageSupported()
Java 仮想マシンがオブジェクトモニターの使用量の監視をサポートするかどうかをテストします。
|
boolean |
isSynchronizerUsageSupported()
Java 仮想マシンが所有可能なシンクロナイザの使用量の監視をサポートするかどうかをテストします。
|
boolean |
isThreadContentionMonitoringEnabled()
スレッドコンテンション監視が有効かどうかをテストします。
|
boolean |
isThreadContentionMonitoringSupported()
Java 仮想マシンがスレッドコンテンション監視をサポートするかどうかをテストします。
|
boolean |
isThreadCpuTimeEnabled()
スレッドの CPU 時間測定が有効かどうかをテストします。
|
boolean |
isThreadCpuTimeSupported()
Java 仮想マシンの実装が任意のスレッドの CPU 時間測定をサポートするかどうかをテストします。
|
void |
resetPeakThreadCount()
ピークスレッドカウントをライブスレッドの現在の数にリセットします。
|
void |
setThreadContentionMonitoringEnabled(boolean enable)
スレッドコンテンション監視を有効または無効にします。
|
void |
setThreadCpuTimeEnabled(boolean enable)
スレッドの CPU 時間測定を有効または無効にします。
|
getObjectName
int getThreadCount()
int getPeakThreadCount()
long getTotalStartedThreadCount()
int getDaemonThreadCount()
long[] getAllThreadIds()
SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。ThreadInfo getThreadInfo(long id)
getThreadInfo(id, 0);
このメソッドは、指定された ID のスレッドに関するスレッド情報を表す ThreadInfo オブジェクトを返します。返された ThreadInfo オブジェクトのスタックトレース、ロックされたモニター、およびロックされたシンクロナイザは、空になります。 指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは null を返します。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。
MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo.from
メソッドで指定された属性を含む CompositeData です。
id
- スレッドのスレッド ID。正の値でなければならないThreadInfo
オブジェクト。指定された ID のスレッドが生存または存在していない場合は null。IllegalArgumentException
- id <= 0 の場合。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。ThreadInfo[] getThreadInfo(long[] ids)
getThreadInfo
(ids, 0);
このメソッドは、ThreadInfo オブジェクトの配列を返します。各 ThreadInfo オブジェクトのスタックトレース、ロックされたモニター、およびロックされたシンクロナイザは、空になります。 指定された ID のスレッドが生存していないか、存在していない場合、返された配列の対応する要素は、null を含みます。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。
MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo.from
メソッドで指定された属性を含む CompositeData です。
ids
- スレッド ID の配列。ThreadInfo
オブジェクトの配列。IllegalArgumentException
- 入力配列 ids の要素が <= 0 である場合。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。ThreadInfo getThreadInfo(long id, int maxDepth)
StackTraceElement
の最大数を示します。maxDepth == Integer.MAX_VALUE の場合、スレッドのスタックトレース全体がダンプされます。maxDepth == 0 の場合、スレッドのスタックトレースはダンプされません。このメソッドは、スレッドのロックされたモニターおよびロックされたシンクロナイザを取得しません。
Java 仮想マシンがスレッドのスタックトレース情報を持たない場合、または maxDepth == 0 の場合、ThreadInfo オブジェクトのスタックトレースは StackTraceElement の空の配列になります。
指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは null を返します。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。
MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo.from
メソッドで指定された属性を含む CompositeData です。
id
- スレッドのスレッド ID。正の値でなければならないmaxDepth
- ダンプされるスタックトレースのエントリの最大数。Integer.MAX_VALUE を使って、スタック全体をダンプするよう要求できる。ThreadInfo
。指定された ID のスレッドが生存または存在していない場合は null。IllegalArgumentException
- id <= 0 の場合。IllegalArgumentException
- maxDepth が負の場合。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)
StackTraceElement
の最大数を示します。maxDepth == Integer.MAX_VALUE の場合、スレッドのスタックトレース全体がダンプされます。maxDepth == 0 の場合、スレッドのスタックトレースはダンプされません。このメソッドは、スレッドのロックされたモニターおよびロックされたシンクロナイザは取得しません。
Java 仮想マシンがスレッドのスタックトレース情報を持たない場合、または maxDepth == 0 の場合、ThreadInfo オブジェクトのスタックトレースは StackTraceElement の空の配列になります。
このメソッドは、ThreadInfo オブジェクトの配列を返します。配列の各要素は、ids 配列と同じインデックスを持つスレッドに関するスレッド情報です。指定された ID のスレッドが生存していないか、存在しない場合、返される配列の対応する要素に null が設定されます。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。
MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo.from
メソッドで指定された属性を含む CompositeData です。
ids
- スレッド ID の配列maxDepth
- ダンプされるスタックトレースのエントリの最大数。Integer.MAX_VALUE を使って、スタック全体をダンプするよう要求できる。ThreadInfo
オブジェクトの配列。IllegalArgumentException
- maxDepth が負の場合。IllegalArgumentException
- 入力配列 ids の要素が <= 0 である場合。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。boolean isThreadContentionMonitoringSupported()
boolean isThreadContentionMonitoringEnabled()
UnsupportedOperationException
- Java 仮想マシンがスレッドコンテンション監視をサポートしない場合。isThreadContentionMonitoringSupported()
void setThreadContentionMonitoringEnabled(boolean enable)
enable
- 有効にする場合は true、無効にする場合は false。UnsupportedOperationException
- Java 仮想マシンがスレッドコンテンション監視をサポートしない場合。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("control") を持たない場合。isThreadContentionMonitoringSupported()
long getCurrentThreadCpuTime()
このメソッドは、ローカル管理で使用する簡易メソッドであり、次を呼び出すのと同等です。
getThreadCpuTime
(Thread.currentThread().getId());
UnsupportedOperationException
- Java 仮想マシンが現在のスレッドの CPU 時間測定をサポートしない場合。getCurrentThreadUserTime()
, isCurrentThreadCpuTimeSupported()
, isThreadCpuTimeEnabled()
, setThreadCpuTimeEnabled(boolean)
long getCurrentThreadUserTime()
このメソッドは、ローカル管理で使用する簡易メソッドであり、次を呼び出すのと同等です。
getThreadUserTime
(Thread.currentThread().getId());
UnsupportedOperationException
- Java 仮想マシンが現在のスレッドの CPU 時間測定をサポートしない場合。getCurrentThreadCpuTime()
, isCurrentThreadCpuTimeSupported()
, isThreadCpuTimeEnabled()
, setThreadCpuTimeEnabled(boolean)
long getThreadCpuTime(long id)
指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは -1 を返します。CPU 時間測定が無効の場合、このメソッドは -1 を返します。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。
スレッドが起動されたあとに CPU 時間測定が有効になった場合、Java 仮想マシンの実装では、CPU 時間測定が起動されたポイントとして CPU 時間測定機能が有効になった時間以前の任意の時間を選択できます。
id
- スレッドのスレッド IDIllegalArgumentException
- id <= 0 の場合。UnsupportedOperationException
- Java 仮想マシンがほかのスレッドの CPU 時間測定をサポートしない場合。getThreadUserTime(long)
, isThreadCpuTimeSupported()
, isThreadCpuTimeEnabled()
, setThreadCpuTimeEnabled(boolean)
long getThreadUserTime(long id)
指定された ID のスレッドが生存していないか、存在していない場合、このメソッドは -1 を返します。CPU 時間測定が無効の場合、このメソッドは -1 を返します。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。
スレッドが起動されたあとに CPU 時間測定が有効になった場合、Java 仮想マシンの実装では、CPU 時間測定が起動されたポイントとして CPU 時間測定機能が有効になった時間以前の任意の時間を選択できます。
id
- スレッドのスレッド IDIllegalArgumentException
- id <= 0 の場合。UnsupportedOperationException
- Java 仮想マシンがほかのスレッドの CPU 時間測定をサポートしない場合。getThreadCpuTime(long)
, isThreadCpuTimeSupported()
, isThreadCpuTimeEnabled()
, setThreadCpuTimeEnabled(boolean)
boolean isThreadCpuTimeSupported()
boolean isCurrentThreadCpuTimeSupported()
isThreadCpuTimeSupported()
が true を返す場合、このメソッドは true を返します。boolean isThreadCpuTimeEnabled()
UnsupportedOperationException
- Java 仮想マシンがほかのスレッドばかりでなく現在のスレッドの CPU 時間測定もサポートしない場合。isThreadCpuTimeSupported()
, isCurrentThreadCpuTimeSupported()
void setThreadCpuTimeEnabled(boolean enable)
enable
- 有効にする場合は true、無効にする場合は false。UnsupportedOperationException
- Java 仮想マシンが任意のスレッドばかりでなく現在のスレッドの CPU 時間測定もサポートしない場合。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("control") を持たない場合。isThreadCpuTimeSupported()
, isCurrentThreadCpuTimeSupported()
long[] findMonitorDeadlockedThreads()
Object.wait
呼び出しのあと、同期ブロックに再入するのを待機しています。ここでは、サイクル中の別のスレッドにより保持されている別のモニターの取得を試行している間、各スレッドは 1 つのモニターを保有しています。
公式には、スレッドが、「ほかのスレッドにより保有されるオブジェクトモニターを待機している」関係にあるサイクルの一部である場合、スレッドはモニターデッドロックされます。もっとも簡単なケースについて説明すると、スレッド A は、スレッド B が所有するモニターを待機するのをブロックされ、スレッド B はスレッド A が所有するモニターを待機するのをブロックされます。
このメソッドはトラブルシューティングのために設計されていますが、同期制御のためのものではありません。このメソッドの操作は負荷が大きくなる可能性があります。
このメソッドは、オブジェクトモニターに関するデッドロックだけを検索します。オブジェクトモニターと所有可能なシンクロナイザの両方に関するデッドロックを検索するには、findDeadlockedThreads
メソッドを使用するようにしてください。
SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。findDeadlockedThreads()
void resetPeakThreadCount()
SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("control") を持たない場合。getPeakThreadCount()
, getThreadCount()
long[] findDeadlockedThreads()
このメソッドはトラブルシューティングのために設計されていますが、同期制御のためのものではありません。このメソッドの操作は負荷が大きくなる可能性があります。
SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。UnsupportedOperationException
- Java 仮想マシンが所有可能なシンクロナイザの使用量の監視をサポートしない場合。isSynchronizerUsageSupported()
, findMonitorDeadlockedThreads()
boolean isObjectMonitorUsageSupported()
dumpAllThreads(boolean, boolean)
boolean isSynchronizerUsageSupported()
dumpAllThreads(boolean, boolean)
ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
このメソッドは、スレッドごとにスレッド情報のスナップショットを取得します。たとえば次のとおりです。
このメソッドは、ThreadInfo オブジェクトの配列を返します。配列の各要素は、ids 配列と同じインデックスを持つスレッドに関するスレッド情報です。指定された ID のスレッドが生存していないか、存在しない場合、返される配列の対応する要素に null が設定されます。指定された ID のスレッドが起動され、生存している場合、スレッドは生存しています。
スレッドがオブジェクトモニターをロックしていない場合、または lockedMonitors が false の場合、返される ThreadInfo オブジェクトは空の MonitorInfo 配列を持ちます。同様に、スレッドがシンクロナイザをロックしていない場合、または lockedSynchronizers が false の場合、返される ThreadInfo オブジェクトは空の LockInfo 配列を持ちます。
lockedMonitors パラメータおよび lockedSynchronizers パラメータの両方が false の場合は、次を呼び出すことに相当します。
getThreadInfo(ids, Integer.MAX_VALUE)
このメソッドはトラブルシューティングのために設計されていますが、同期制御のためのものではありません。このメソッドの操作は負荷が大きくなる可能性があります。
MBeanServer アクセス:
ThreadInfo のマップ型は、ThreadInfo.from
メソッドで指定された属性を含む CompositeData です。
ids
- スレッド ID の配列。lockedMonitors
- true の場合、ロックされたすべてのモニターを取得する。lockedSynchronizers
- true の場合、ロックされたすべての所有可能なシンクロナイザを取得する。ThreadInfo
オブジェクトの配列。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。UnsupportedOperationException
- isObjectMonitorUsageSupported()
, isSynchronizerUsageSupported()
ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
このメソッドは、getThreadInfo(long[], boolean, boolean)
メソッドで指定された ThreadInfo
オブジェクトの配列を返します。
lockedMonitors
- true の場合、ロックされたすべてのモニターをダンプする。lockedSynchronizers
- true の場合、ロックされたすべての所有可能なシンクロナイザをダンプする。ThreadInfo
の配列。SecurityException
- セキュリティーマネージャーが存在する場合で、呼び出し元が ManagementPermission("monitor") を持たない場合。UnsupportedOperationException
- isObjectMonitorUsageSupported()
, isSynchronizerUsageSupported()
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.