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, 2014, Oracle and/or its affiliates. All rights reserved.