- すべてのスーパー・インタフェース:
PlatformManagedObject
- 既知のすべてのサブインタフェース:
ThreadMXBean
ThreadMXBean
は、Java仮想マシンでの「プラットフォーム・スレッド」のモニタリングおよび管理をサポートします。 プラットフォーム・スレッドは通常、オペレーティング・システムによってスケジュールされたカーネル・スレッドにマップされます。 ThreadMXBean
は、「仮想スレッド」のモニタリングまたは管理をサポートしていません。
Java仮想マシンは、このインタフェースの実装クラスの単一インスタンスを持ちます。 このインタフェースを実装するこのインスタンスは、ManagementFactory.getThreadMXBean()
メソッドをコールするか、platform MBeanServer
メソッドから取得できるMXBeanです。
MBeanServer内のスレッド・システムのMXBeanを一意に識別するためのObjectName
は、次のとおりです:
java.lang:type=Threading
これを取得するには、PlatformManagedObject.getObjectName()
メソッドを呼び出します。
スレッドID
スレッドIDは、スレッドthreadId()
メソッドをコールして戻される正のlong値です。 スレッドIDは一意であり、その寿命を通じて変更されることはありません。 スレッドが終了すると、そのスレッドIDが再使用される可能性があります。
このインタフェースの一部のメソッドは、入力パラメータとしてスレッドIDまたはスレッドIDの配列を取得してスレッドごとの情報を返します。
スレッドCPU時間
Java仮想マシン実装では、現在のプラットフォーム・スレッド、プラットフォーム・スレッド、スレッドなしのCPU時間の測定をサポートできます。
isThreadCpuTimeSupported()
メソッドを使用すると、Java仮想マシンが任意のプラットフォーム・スレッドのCPU時間の測定をサポートするかどうかを判断できます。 isCurrentThreadCpuTimeSupported()
メソッドを使用すると、Java仮想マシンがプラットフォーム・スレッドのgetCurrentThreadCpuTime()
およびgetCurrentThreadUserTime()
メソッドでCPU時間の測定をサポートするかどうかを判断できます。
このインタフェースで発生するCPU時間は、その単位の精度がナノ秒となっていますが、ここではこれほどの精度は要求されません。
Java仮想マシンでは、デフォルトでCPU時間の測定を無効にできます。 isThreadCpuTimeEnabled()
およびsetThreadCpuTimeEnabled(boolean)
メソッドを使って、CPU時間測定が有効になっているかどうかをテストしたり、測定のサポートを有効または無効にしたりすることができます。 スレッドCPU測定を有効にすると、一部のJava仮想マシンの実装では、負荷が大きくなる可能性があります。
スレッド・コンテンション監視
一部のJava仮想マシンは、スレッド・コンテンション監視をサポートします。 スレッド競合モニタリングが有効になっている場合、スレッドが同期のためにブロックしたか、通知を待機した累積経過時間が収集され、ThreadInfo
オブジェクトに返されます。
isThreadContentionMonitoringSupported()
メソッドを使って、Java仮想マシンがスレッド・コンテンション監視をサポートしているかどうかを判定できます。 スレッド・コンテンション監視はデフォルトで無効です。 setThreadContentionMonitoringEnabled(boolean)
メソッドを使って、スレッド・コンテンション監視を有効にすることができます。
同期情報とデッドロック検出
一部のJava仮想マシンは、オブジェクト・モニターの使用量および所有可能なシンクロナイザの使用量の監視をサポートしている場合があります。getThreadInfo(long[], boolean, boolean)
メソッドとdumpAllThreads(boolean, boolean)
メソッドを使用すると、スレッドのスタック・トレースと同期情報(スレッドが取得をブロックされているまたは待機しているロックに関して、スレッドが現在所有しているロックに関してなど)を取得できます。
ThreadMXBean
インタフェースには、実行中のアプリケーションでデッドロックを見つけるためのfindMonitorDeadlockedThreads()
およびfindDeadlockedThreads()
メソッドが用意されています。
- 導入されたバージョン:
- 1.5
- 関連項目:
-
メソッドのサマリー
修飾子と型メソッド説明dumpAllThreads
(boolean lockedMonitors, boolean lockedSynchronizers) スタック・トレースおよび同期情報を含むすべてのライブ・プラットフォーム・スレッドのスレッド情報を返します。default ThreadInfo[]
dumpAllThreads
(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) 指定された最大数の要素と同期情報のスタック・トレースを持つすべてのライブ・プラットフォーム・スレッドのスレッド情報を返します。long[]
オブジェクト・モニターまたは「独自のシンクロナイザ」の取得を待機しているデッドロック状態のプラットフォーム・スレッドのサイクルを検索します。long[]
オブジェクト・モニターの取得を待機しているデッドロック状態にあるプラットフォーム・スレッドのサイクルを検索します。long[]
すべてのライブ・プラットフォーム・スレッドのthreadIDsを返します。long
現在のスレッドの合計CPU時間をナノ秒単位で返します。long
現在のスレッドがユーザー・モードで実行したCPU時間(ナノ秒単位)を返します。int
デーモン・スレッドであるライブ・プラットフォーム・スレッドの現在の数を返します。int
Java仮想マシンが起動したかピークがリセットされた後のライブ・プラットフォーム・スレッドのピーク数を返します。int
デーモンと非デーモン・スレッドの両方を含むライブ・プラットフォーム・スレッドの現在の数を返します。long
getThreadCpuTime
(long id) 指定されたIDのスレッドの合計CPU時間(ナノ秒単位)を返します。getThreadInfo
(long id) 指定されたid
のスレッドのスレッド情報をスタック・トレースなしで返します。getThreadInfo
(long[] ids) スタック・トレースのない入力配列ids
にIDがある各スレッドのスレッド情報を返します。getThreadInfo
(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers) IDが入力配列ids
にある各スレッドのスレッド情報を、スタック・トレースおよび同期情報とともに返します。default ThreadInfo[]
getThreadInfo
(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) IDが入力配列ids
にある各スレッドのスレッド情報を返します。指定された最大数の要素と同期情報のスタック・トレースが返されます。getThreadInfo
(long[] ids, int maxDepth) IDが入力配列ids
内にある各スレッドのスレッド情報を、指定した数のスタック・トレース要素のスタック・トレースとともに返します。getThreadInfo
(long id, int maxDepth) 指定されたid
のスレッドのスレッド情報を、指定した数のスタック・トレース要素のスタック・トレースとともに返します。long
getThreadUserTime
(long id) 指定されたIDのスレッドがユーザー・モードで実行したCPU時間(ナノ秒単位)を返します。long
Java仮想マシンの起動後に作成および起動されたプラットフォーム・スレッドの合計数を返します。boolean
getCurrentThreadCpuTime()
およびgetCurrentThreadUserTime()
メソッドを使用して、Java仮想マシンがプラットフォーム・スレッドからのCPU時間測定をサポートするかどうかをテストします。boolean
Java仮想マシンがオブジェクト・モニターの使用量の監視をサポートするかどうかをテストします。boolean
Java仮想マシンが所有可能なシンクロナイザの使用量の監視をサポートするかどうかをテストします。boolean
スレッド・コンテンション監視が有効かどうかをテストします。boolean
Java仮想マシンがスレッド・コンテンション監視をサポートするかどうかをテストします。boolean
スレッドのCPU時間測定が有効かどうかをテストします。boolean
Java仮想マシン実装がプラットフォーム・スレッドのCPU時間測定をサポートしているかどうかをテストします。void
ピーク・スレッド数を現在のライブ・プラットフォーム・スレッド数にリセットします。void
setThreadContentionMonitoringEnabled
(boolean enable) スレッド・コンテンション監視を有効または無効にします。void
setThreadCpuTimeEnabled
(boolean enable) スレッドのCPU時間測定を有効または無効にします。インタフェースjava.lang.management.PlatformManagedObjectで宣言されたメソッド
getObjectName
-
メソッドの詳細
-
getThreadCount
int getThreadCount()デーモンと非デーモン・スレッドの両方を含むライブ・プラットフォーム・スレッドの現在の数を返します。 このカウントには仮想スレッドは含まれません。- 戻り値:
- ライブ・プラットフォーム・スレッドの現在の数。
-
getPeakThreadCount
int getPeakThreadCount()Java仮想マシンが起動したかピークがリセットされた後のライブ・プラットフォーム・スレッドのピーク数を返します。 このカウントには仮想スレッドは含まれません。- 戻り値:
- 最大ライブ・プラットフォーム・スレッド数。
-
getTotalStartedThreadCount
long getTotalStartedThreadCount()Java仮想マシンの起動後に作成および起動されたプラットフォーム・スレッドの合計数を返します。 このカウントには仮想スレッドは含まれません。- 戻り値:
- 開始されたプラットフォーム・スレッドの合計数。
-
getDaemonThreadCount
int getDaemonThreadCount()デーモン・スレッドであるライブ・プラットフォーム・スレッドの現在の数を返します。 このカウントには仮想スレッドは含まれません。- 戻り値:
- デーモン・スレッドであるライブ・プラットフォーム・スレッドの現在の数。
-
getAllThreadIds
long[] getAllThreadIds()すべてのライブ・プラットフォーム・スレッドのthreadIDsを返します。 仮想スレッドのスレッドIDは含まれません。 返された配列に含まれる一部のスレッドは、このメソッドが値を返したときに終了していた可能性があります。- 戻り値:
long
の配列で、それぞれがスレッドIDです。- 例外:
SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。
-
getThreadInfo
ThreadInfo getThreadInfo(long id) 指定されたid
のスレッドのスレッド情報をスタック・トレースなしで返します。 このメソッドは、次を呼び出すのと同等です。getThreadInfo(id, 0);
このメソッドは、指定されたIDのスレッドのスレッド情報を表す
ThreadInfo
オブジェクトを返します。 返されたThreadInfo
オブジェクトのスタック・トレース、ロックされたモニターおよびロックされたシンクロナイザは空になります。 指定されたIDのスレッドが仮想スレッドであるか、動作していないか、存在しない場合、このメソッドはnull
を返します。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。MBeanServerアクセス:
ThreadInfo
のマップされたタイプは、ThreadInfo.from
メソッドで指定された属性を持つCompositeData
です。- パラメータ:
id
- スレッドのスレッドID。 正の値でなければならない- 戻り値:
- 指定されたIDのスレッドに対する
ThreadInfo
オブジェクト(スタック・トレースなし、ロックされたモニターなし、シンクロナイザ情報なし)。null
(指定されたIDのスレッドが仮想スレッドである場合、または存在しない場合)。 - 例外:
IllegalArgumentException
-id <= 0
の場合。SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。
-
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids) スタック・トレースのない入力配列ids
にIDがある各スレッドのスレッド情報を返します。 このメソッドは、次を呼び出すのと同等です。getThreadInfo
(ids, 0);このメソッドは、
ThreadInfo
オブジェクトの配列を返します。 各ThreadInfo
オブジェクトのスタック・トレース、ロックされたモニターおよびロックされたシンクロナイザは空になります。 指定されたIDのスレッドが仮想スレッドであるか、動作していないか、存在しない場合、返される配列内の対応する要素にnull
が含まれます。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。MBeanServerアクセス:
ThreadInfo
のマップされたタイプは、ThreadInfo.from
メソッドで指定された属性を持つ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
を返します。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。MBeanServerアクセス:
ThreadInfo
のマップされたタイプは、ThreadInfo.from
メソッドで指定された属性を持つCompositeData
です。- パラメータ:
id
- スレッドのスレッドID。 正の値でなければならないmaxDepth
- ダンプされるスタック・トレースのエントリの最大数。Integer.MAX_VALUE
を使用して、スタック全体をダンプするようにリクエストできます。- 戻り値:
- ロックされたモニターおよびシンクロナイザ情報がない特定のIDのスレッドの
ThreadInfo
。null
は、指定されたIDのスレッドが仮想スレッドであるか、存在していない場合です。 - 例外:
IllegalArgumentException
-id <= 0
の場合。IllegalArgumentException
-maxDepth is negative
の場合。SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。
-
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids, int maxDepth) IDが入力配列ids
内にある各スレッドのスレッド情報を、指定した数のスタック・トレース要素のスタック・トレースとともに返します。maxDepth
パラメータは、スタック・トレースから取得されるStackTraceElement
の最大数を示します。maxDepth == Integer.MAX_VALUE
の場合、スレッドのスタック・トレース全体がダンプされます。maxDepth == 0
の場合、スレッドのスタック・トレースはダンプされません。 このメソッドは、スレッドのロックされたモニターおよびロックされたシンクロナイザは取得しません。Java仮想マシンにスレッドまたは
maxDepth == 0
に関するスタック・トレース情報がない場合、ThreadInfo
オブジェクトのスタック・トレースはStackTraceElement
の空の配列になります。このメソッドは、
ThreadInfo
オブジェクトの配列を返します。それぞれが、ids
配列と同じ索引を持つスレッドに関するスレッド情報です。 指定されたIDのスレッドが仮想スレッドであるか、動作していないか、存在しない場合、null
は返される配列の対応する要素に設定されます。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。MBeanServerアクセス:
ThreadInfo
のマップされたタイプは、ThreadInfo.from
メソッドで指定された属性を持つ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仮想マシンがスレッド・コンテンション監視をサポートしない場合。- 関連項目:
-
setThreadContentionMonitoringEnabled
void setThreadContentionMonitoringEnabled(boolean enable) スレッド・コンテンション監視を有効または無効にします。 デフォルト時は、スレッドの競合のモニタリングが無効になっています。- パラメータ:
enable
- 有効にするにはtrue
、無効にするにはfalse
。- 例外:
UnsupportedOperationException
- Java仮想マシンがスレッド・コンテンション監視をサポートしない場合。SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("control")を持たない場合。- 関連項目:
-
getCurrentThreadCpuTime
long getCurrentThreadCpuTime()現在のスレッドの合計CPU時間をナノ秒単位で返します。 戻り値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。 実装がユーザー・モード時とシステム・モード時を区別する場合、返されるCPU時間は、ユーザー・モードまたはシステム・モードで現在のスレッドが実行した時間の合計です。ローカル管理用の便利なメソッドであり、次のようにコールすることに相当します:
getThreadCpuTime
(Thread.currentThread().threadId());- 戻り値:
- 現在のスレッドがプラットフォーム・スレッドの場合、およびCPU時間の測定が有効な場合は、現在のスレッドの合計CPU時間。それ以外の場合は
-1
。 - 例外:
UnsupportedOperationException
- Java仮想マシンが現在のスレッドのCPU時間測定をサポートしない場合。- 関連項目:
-
getCurrentThreadUserTime
long getCurrentThreadUserTime()現在のスレッドがユーザー・モードで実行したCPU時間(ナノ秒単位)を返します。 戻り値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。ローカル管理用の便利なメソッドであり、次のようにコールすることに相当します:
getThreadUserTime
(Thread.currentThread().threadId());- 戻り値:
- 現在のスレッドがプラットフォーム・スレッドであり、CPU時間測定が有効な場合は、現在のスレッドのユーザー・レベルのCPU時間。それ以外の場合は
-1
。 - 例外:
UnsupportedOperationException
- Java仮想マシンが現在のスレッドのCPU時間測定をサポートしない場合。- 関連項目:
-
getThreadCpuTime
long getThreadCpuTime(long id) 指定されたIDのスレッドの合計CPU時間(ナノ秒単位)を返します。 戻り値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。 実装がユーザー・モード時とシステム・モード時を区別する場合、返されるCPU時間は、ユーザー・モードまたはシステム・モードでそのスレッドが実行した時間の合計です。指定されたIDのスレッドが仮想スレッドであるか、有効でないか、存在しない場合、このメソッドは
-1
を返します。 CPU時間の測定が無効になっている場合、このメソッドは-1
を返します。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。スレッドが起動されたあとにCPU時間測定が有効になった場合、Java仮想マシンの実装では、CPU時間測定が起動されたポイントとしてCPU時間測定機能が有効になった時間以前の任意の時間を選択できます。
- パラメータ:
id
- スレッドのスレッドID- 戻り値:
- 指定したIDのスレッドがプラットフォーム・スレッドであり、スレッドがアクティブで、CPU時間の測定が有効な場合、指定されたIDのスレッドの合計CPU時間。それ以外の場合は
-1
。 - 例外:
IllegalArgumentException
-id <= 0
の場合。UnsupportedOperationException
- Java仮想マシンがほかのスレッドのCPU時間測定をサポートしない場合。- 関連項目:
-
getThreadUserTime
long getThreadUserTime(long id) 指定されたIDのスレッドがユーザー・モードで実行したCPU時間(ナノ秒単位)を返します。 戻り値はナノ秒単位の精度ですが、必ずしもナノ秒の正確度ではありません。指定されたIDのスレッドが仮想スレッドであるか、動作していないか、存在しない場合、このメソッドは
-1
を返します。 CPU時間の測定が無効になっている場合、このメソッドは-1
を返します。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。スレッドが起動されたあとにCPU時間測定が有効になった場合、Java仮想マシンの実装では、CPU時間測定が起動されたポイントとしてCPU時間測定機能が有効になった時間以前の任意の時間を選択できます。
- パラメータ:
id
- スレッドのスレッドID- 戻り値:
- 指定したIDのスレッドがプラットフォーム・スレッドであり、スレッドがアクティブであり、CPU時間測定が有効な場合、指定されたIDのスレッドに対するユーザー・レベルのCPU時間。それ以外の場合は
-1
。 - 例外:
IllegalArgumentException
-id <= 0
の場合。UnsupportedOperationException
- Java仮想マシンがほかのスレッドのCPU時間測定をサポートしない場合。- 関連項目:
-
isThreadCpuTimeSupported
boolean isThreadCpuTimeSupported()Java仮想マシン実装がプラットフォーム・スレッドのCPU時間測定をサポートしているかどうかをテストします。 プラットフォーム・スレッドのCPU時間測定をサポートするJava仮想マシン実装では、現在のスレッドがプラットフォーム・スレッドの場合、現在のスレッドのCPU時間測定もサポートされます。- 戻り値:
- Java仮想マシンがプラットフォーム・スレッドのCPU時間測定をサポートする場合は
true
、そうでない場合はfalse
。
-
isCurrentThreadCpuTimeSupported
boolean isCurrentThreadCpuTimeSupported()getCurrentThreadCpuTime()
およびgetCurrentThreadUserTime()
メソッドを使用して、Java仮想マシンがプラットフォーム・スレッドからのCPU時間測定をサポートするかどうかをテストします。 このメソッドは、isThreadCpuTimeSupported()
がtrue
を返す場合、true
を返します。- 戻り値:
- Java仮想マシンが現在のプラットフォーム・スレッドのCPU時間測定をサポートする場合は
true
、そうでない場合はfalse
。
-
isThreadCpuTimeEnabled
boolean isThreadCpuTimeEnabled()スレッドのCPU時間測定が有効かどうかをテストします。- 戻り値:
- スレッドCPU時間の測定が有効な場合は
true
、それ以外の場合はfalse
。 - 例外:
UnsupportedOperationException
- Java仮想マシンがほかのスレッドばかりでなく現在のスレッドのCPU時間測定もサポートしない場合。- 関連項目:
-
setThreadCpuTimeEnabled
void setThreadCpuTimeEnabled(boolean enable) スレッドのCPU時間測定を有効または無効にします。 デフォルトはプラットフォームに依存します。- パラメータ:
enable
- 有効にするにはtrue
、無効にするにはfalse
。- 例外:
UnsupportedOperationException
- Java仮想マシンが任意のスレッドばかりでなく現在のスレッドのCPU時間測定もサポートしない場合。SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("control")を持たない場合。- 関連項目:
-
findMonitorDeadlockedThreads
long[] findMonitorDeadlockedThreads()オブジェクト・モニターの取得を待機しているデッドロック状態にあるプラットフォーム・スレッドのサイクルを検索します。 つまり、同期ブロックの入力を待機しているプラットフォーム・スレッド、またはObject.wait
コール後に同期ブロックの再入力を待機しているプラットフォーム・スレッドです。各プラットフォーム・スレッドは1つのモニターを所有し、別のプラットフォーム・スレッドによってサイクル内にすでに保持されている別のモニターを取得しようとしています。 仮想スレッドを含むサイクルは、このメソッドでは見つかりません。公式には、スレッドが、「ほかのスレッドにより保有されるオブジェクト・モニターを待機している」関係にあるサイクルの一部である場合、スレッドはモニター・デッドロックされます。 もっとも簡単なケースについて説明すると、スレッドAは、スレッドBが所有するモニターを待機するのをブロックされ、スレッドBはスレッドAが所有するモニターを待機するのをブロックされます。
このメソッドはトラブルシューティングのために設計されていますが、同期制御のためのものではありません。 このメソッドの操作は負荷が大きくなる可能性があります。
このメソッドは、オブジェクト・モニターに関するデッドロックだけを検索します。 オブジェクト・モニターと所有可能なシンクロナイザの両方に関するデッドロックを検索するには、
findDeadlockedThreads
メソッドを使用するようにしてください。- 戻り値:
- デッドロックがモニターされるプラットフォーム・スレッドのIDの配列(存在する場合)。それ以外の場合は
null
。 - 例外:
SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。- 関連項目:
-
resetPeakThreadCount
void resetPeakThreadCount()ピーク・スレッド数を現在のライブ・プラットフォーム・スレッド数にリセットします。- 例外:
SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("control")を持たない場合。- 関連項目:
-
findDeadlockedThreads
long[] findDeadlockedThreads()オブジェクト・モニターまたは「独自のシンクロナイザ」の取得を待機しているデッドロック状態のプラットフォーム・スレッドのサイクルを検索します。 プラットフォーム・スレッドは、サイクル内の別のプラットフォーム・スレッドによってすでに保持されている別のロックを取得しようとして、各スレッドが1つのロックを所有している場合、これらの2つのタイプのロックを待機するサイクル内の「デッドロック」です。 仮想スレッドを含むサイクルは、このメソッドでは見つかりません。このメソッドはトラブルシューティングのために設計されていますが、同期制御のためのものではありません。 このメソッドの操作は負荷が大きくなる可能性があります。
- 戻り値:
- オブジェクト・モニターまたは所有可能なシンクロナイザ(ある場合)を待機しているデッドロックされたプラットフォーム・スレッドのIDの配列。それ以外の場合は
null
。 - 例外:
SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。UnsupportedOperationException
- Java仮想マシンが所有可能なシンクロナイザの使用量のモニタリングをサポートしない場合。- 導入されたバージョン:
- 1.6
- 関連項目:
-
isObjectMonitorUsageSupported
boolean isObjectMonitorUsageSupported()Java仮想マシンがオブジェクト・モニターの使用量の監視をサポートするかどうかをテストします。- 戻り値:
- Java仮想マシンがオブジェクト・モニター使用状況のモニタリングをサポートしている場合は
true
、そうでない場合はfalse
。 - 導入されたバージョン:
- 1.6
- 関連項目:
-
isSynchronizerUsageSupported
boolean isSynchronizerUsageSupported()Java仮想マシンが所有可能なシンクロナイザの使用量の監視をサポートするかどうかをテストします。- 戻り値:
- Java仮想マシンが、所有可能なシンクロナイザ使用状況のモニタリングをサポートしている場合は
true
、それ以外の場合はfalse
。 - 導入されたバージョン:
- 1.6
- 関連項目:
-
getThreadInfo
ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers) IDが入力配列ids
にある各スレッドのスレッド情報を、スタック・トレースおよび同期情報とともに返します。 これは、次を呼び出すのと同等です。getThreadInfo(ids, lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
- パラメータ:
ids
- スレッドIDの配列。lockedMonitors
-true
を指定すると、ロックされたすべてのモニターが取得されます。lockedSynchronizers
-true
を指定すると、ロックされた所有可能なシンクロナイザがすべて取得されます。- 戻り値:
- IDの入力配列の対応する要素にIDがあるスレッドの情報を含む
ThreadInfo
オブジェクトの配列。 - 例外:
SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。UnsupportedOperationException
-lockedMonitors
がtrue
で、Java仮想マシンが「オブジェクト・モニターの使用」のモニタリングをサポートしていない場合、またはlockedSynchronizers
がtrue
の場合、Java仮想マシンは「所有可能なシンクロナイザの使用」のモニタリングをサポートしていません。
- 導入されたバージョン:
- 1.6
- 関連項目:
-
getThreadInfo
default ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) IDが入力配列ids
にある各スレッドのスレッド情報を返します。指定された最大数の要素と同期情報のスタック・トレースが返されます。maxDepth == 0
の場合、スレッドのスタック・トレースはダンプされません。このメソッドは、スレッドごとにスレッド情報のスナップショットを取得します。たとえば次のとおりです。
- 指定された最大数の要素のスタック・トレース、
lockedMonitors
がtrue
の場合、オブジェクトは現在スレッドによってロックされているモニターlockedSynchronizers
がtrue
の場合、現在スレッドによってロックされている「独自のシンクロナイザ」。
このメソッドは、
ThreadInfo
オブジェクトの配列を返します。それぞれが、ids
配列と同じ索引を持つスレッドに関するスレッド情報です。 指定されたIDのスレッドが仮想スレッドであるか、動作していないか、存在しない場合、null
は返される配列の対応する要素に設定されます。 スレッドが開始され、まだ終了していない場合、スレッドは存続しています。スレッドがオブジェクト・モニターをロックしない場合、または
lockedMonitors
がfalse
の場合、返されるThreadInfo
オブジェクトには空のMonitorInfo
配列が含まれます。 同様に、スレッドがシンクロナイザをロックしない場合、またはlockedSynchronizers
がfalse
の場合、返されるThreadInfo
オブジェクトには空のLockInfo
配列が含まれます。lockedMonitors
パラメータとlockedSynchronizers
パラメータの両方がfalse
の場合、次のコールと同等です:getThreadInfo(ids, maxDepth)
このメソッドはトラブルシューティングのために設計されていますが、同期制御のためのものではありません。 このメソッドの操作は負荷が大きくなる可能性があります。
MBeanServerアクセス:
ThreadInfo
のマップされたタイプは、ThreadInfo.from
メソッドで指定された属性を持つCompositeData
です。- 実装要件:
- デフォルト実装は
UnsupportedOperationException
をスローします。 - パラメータ:
ids
- スレッドIDの配列。lockedMonitors
-true
を指定すると、ロックされたすべてのモニターが取得されます。lockedSynchronizers
-true
を指定すると、ロックされた所有可能なシンクロナイザがすべて取得されます。maxDepth
- スタック・トレースから取得するStackTraceElement
の最大数を示します。- 戻り値:
- IDの入力配列の対応する要素にIDがあるスレッドの情報を含む
ThreadInfo
オブジェクトの配列。 - 例外:
IllegalArgumentException
-maxDepth
が負の場合。SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。UnsupportedOperationException
-lockedMonitors
がtrue
で、Java仮想マシンが「オブジェクト・モニターの使用」のモニタリングをサポートしていない場合、またはlockedSynchronizers
がtrue
の場合、Java仮想マシンは「所有可能なシンクロナイザの使用」のモニタリングをサポートしていません。
- 導入されたバージョン:
- 10
- 関連項目:
-
dumpAllThreads
ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers) スタック・トレースおよび同期情報を含むすべてのライブ・プラットフォーム・スレッドのスレッド情報を返します。 仮想スレッドのスレッドIDは含まれません。 このメソッドは、次を呼び出すのと同等です。dumpAllThreads(lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)
- パラメータ:
lockedMonitors
-true
の場合、ロックされたすべてのモニターをダンプします。lockedSynchronizers
-true
の場合、ロックされたすべての所有可能なシンクロナイザをダンプします。- 戻り値:
- すべてのライブ・プラットフォーム・スレッドの
ThreadInfo
配列。 - 例外:
SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。UnsupportedOperationException
-lockedMonitors
がtrue
で、Java仮想マシンが「オブジェクト・モニターの使用」のモニタリングをサポートしていない場合、またはlockedSynchronizers
がtrue
の場合、Java仮想マシンは「所有可能なシンクロナイザの使用」のモニタリングをサポートしていません。
- 導入されたバージョン:
- 1.6
- 関連項目:
-
dumpAllThreads
default ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth) 指定された最大要素数および同期情報のスタック・トレースを含むすべてのライブ・プラットフォーム・スレッドのスレッド情報を返します。maxDepth == 0
の場合、スレッドのスタック・トレースはダンプされません。 仮想スレッドのスレッドIDは含まれません。 返された配列に含まれる一部のスレッドは、このメソッドが値を返したときに終了していた可能性があります。このメソッドは、
getThreadInfo(long[], boolean, boolean, int)
メソッドで指定されているThreadInfo
オブジェクトの配列を返します。- 実装要件:
- デフォルト実装は
UnsupportedOperationException
をスローします。 - パラメータ:
lockedMonitors
-true
の場合、ロックされたすべてのモニターをダンプします。lockedSynchronizers
-true
の場合、ロックされたすべての所有可能なシンクロナイザをダンプします。maxDepth
- スタック・トレースから取得するStackTraceElement
の最大数を示します。- 戻り値:
- すべてのライブ・プラットフォーム・スレッドの
ThreadInfo
配列。 - 例外:
IllegalArgumentException
-maxDepth
が負の場合。SecurityException
- セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。UnsupportedOperationException
-lockedMonitors
がtrue
で、Java仮想マシンが「オブジェクト・モニターの使用」のモニタリングをサポートしていない場合、またはlockedSynchronizers
がtrue
の場合、Java仮想マシンは「所有可能なシンクロナイザの使用」のモニタリングをサポートしていません。
- 導入されたバージョン:
- 10
- 関連項目:
-