モジュール java.management
パッケージ java.lang.management

インタフェースThreadMXBean

  • すべてのスーパー・インタフェース:
    PlatformManagedObject
    既知のすべてのサブインタフェース:
    ThreadMXBean

    public interface ThreadMXBean
    extends PlatformManagedObject
    Java仮想マシンのスレッド・システムの管理インタフェースです。

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

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

    java.lang:type=Threading
    これを取得するには、PlatformManagedObject.getObjectName()メソッドを呼び出します。

    スレッド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仮想マシンは、スレッド・コンテンション監視をサポートします。 スレッド・コンテンション監視が有効な場合、スレッドが同期をブロックしたか通知を待機していた累積経過時間が収集され、ThreadInfoオブジェクトで返されます。

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

    同期情報とデッドロック検出

    一部のJava仮想マシンは、オブジェクト・モニターの使用量および所有可能なシンクロナイザの使用量の監視をサポートしている場合があります。 getThreadInfo(long[], boolean, boolean)メソッドとdumpAllThreads(boolean, boolean)メソッドを使用すると、スレッドのスタック・トレースと同期情報(スレッドが取得をブロックされているまたは待機しているロックに関して、スレッドが現在所有しているロックに関してなど)を取得できます。

    ThreadMXBeanインタフェースは、実行中のアプリケーションのデッドロックを見つけるためのfindMonitorDeadlockedThreads()メソッドおよびfindDeadlockedThreads()メソッドを提供します。

    導入されたバージョン:
    1.5
    関連項目:
    ManagementFactory.getPlatformMXBeans(Class), JMX仕様, MXBeanにアクセスする方法
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 抽象メソッド デフォルト・メソッド 
      修飾子と型 メソッド 説明
      ThreadInfo[] dumpAllThreads​(boolean lockedMonitors, boolean lockedSynchronizers)
      スタック・トレースおよび同期情報を持つすべてのライブ・スレッドのスレッド情報を返します。
      default ThreadInfo[] dumpAllThreads​(boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)
      指定された最大数の要素と同期情報のスタック・トレースを持つすべてのライブ・スレッドのスレッド情報を返します。
      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を持つスレッドごとのスレッド情報を返します。
      default ThreadInfo[] getThreadInfo​(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers, int maxDepth)
      IDが入力配列idsにある各スレッドのスレッド情報を返します。指定された最大数の要素と同期情報のスタック・トレースが返されます。
      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時間測定を有効または無効にします。
    • メソッドの詳細

      • 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オブジェクトのスタック・トレース、ロックされたモニター、およびロックされたシンクロナイザは、空になります。 指定されたIDのスレッドが生存していないか、存在していない場合、このメソッドはnullを返します。 スレッドが起動され、生存している場合、スレッドは生存しています。

        MBeanServerアクセス:
        ThreadInfoのマップ型は、ThreadInfo.fromメソッドで指定された属性を含む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オブジェクトのスタック・トレース、ロックされたモニター、およびロックされたシンクロナイザは、空になります。 指定された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。指定されたIDのスレッドが生存または存在していない場合はnull
        例外:
        IllegalArgumentException - id <= 0の場合。
        IllegalArgumentException - maxDepthが負の場合。
        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が設定されます。 スレッドが起動され、生存している場合、スレッドは生存しています。

        MBeanServerアクセス:
        ThreadInfoのマップ型は、ThreadInfo.fromメソッドで指定された属性を含むCompositeDataです。

        パラメータ:
        ids - スレッドIDの配列
        maxDepth - ダンプされるスタック・トレースのエントリの最大数。 Integer.MAX_VALUEを使って、スタック全体をダンプするよう要求できる。
        戻り値:
        ロックされたモニターおよびシンクロナイザ情報を持たないIDの入力配列の対応する要素にIDがあるスレッドの情報を含むThreadInfoオブジェクトの配列。
        例外:
        IllegalArgumentException - maxDepthが負の場合。
        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を返します。 スレッドが起動され、生存している場合、スレッドは生存しています。

        スレッドが起動されたあとに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を返します。 スレッドが起動され、生存している場合、スレッドは生存しています。

        スレッドが起動されたあとに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が所有するモニターを待機するのをブロックされます。

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

        このメソッドは、オブジェクト・モニターに関するデッドロックだけを検索します。 オブジェクト・モニターと所有可能なシンクロナイザの両方に関するデッドロックを検索するには、findDeadlockedThreadsメソッドを使用するようにしてください。

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

        void resetPeakThreadCount()
        ピーク・スレッド・カウントをライブ・スレッドの現在の数にリセットします。
        例外:
        SecurityException - セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("control")を持たない場合。
        関連項目:
        getPeakThreadCount(), getThreadCount()
      • findDeadlockedThreads

        long[] findDeadlockedThreads()
        オブジェクト・モニターまたは所有可能なシンクロナイザの取得を待機していてデッドロック状態にあるスレッドのサイクルを検索します。 これら2種類のロックを待機しているサイクル中に、各スレッドがロックを所有していて、このサイクルのほかのスレッドによってすでに保持されている別のロックを取得しようとすると、スレッドはデッドロック状態になります。

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

        戻り値:
        オブジェクト・モニターまたは所有可能なシンクロナイザがある場合に、それらを待機していてデッドロックされているスレッドのIDの配列。そうでない場合はnull
        例外:
        SecurityException - セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。
        UnsupportedOperationException - Java仮想マシンが所有可能なシンクロナイザの使用量のモニタリングをサポートしない場合。
        導入されたバージョン:
        1.6
        関連項目:
        isSynchronizerUsageSupported(), findMonitorDeadlockedThreads()
      • isObjectMonitorUsageSupported

        boolean isObjectMonitorUsageSupported()
        Java仮想マシンがオブジェクト・モニターの使用量の監視をサポートするかどうかをテストします。
        戻り値:
        Java仮想マシンがオブジェクト・モニターの使用量の監視をサポートしている場合はtrue、そうでない場合はfalse
        導入されたバージョン:
        1.6
        関連項目:
        dumpAllThreads(boolean, boolean)
      • isSynchronizerUsageSupported

        boolean isSynchronizerUsageSupported()
        Java仮想マシンが所有可能なシンクロナイザの使用量の監視をサポートするかどうかをテストします。
        戻り値:
        Java仮想マシンが所有可能なシンクロナイザの使用量の監視をサポートしている場合はtrue、そうでない場合はfalse
        導入されたバージョン:
        1.6
        関連項目:
        dumpAllThreads(boolean, boolean)
      • getThreadInfo

        default ThreadInfo[] getThreadInfo​(long[] ids,
                                           boolean lockedMonitors,
                                           boolean lockedSynchronizers,
                                           int maxDepth)
        IDが入力配列idsにある各スレッドのスレッド情報を返します。指定された最大数の要素と同期情報のスタック・トレースが返されます。 maxDepth == 0の場合、スレッドのスタック・トレースはダンプされません。

        このメソッドは、スレッドごとにスレッド情報のスナップショットを取得します。たとえば次のとおりです。

        • 指定された最大数の要素のスタック・トレース、
        • lockedMonitorstrueの場合はスレッドによって現在ロックされているオブジェクト・モニター、および
        • lockedSynchronizerstrueの場合はスレッドによって現在ロックされている所有可能なシンクロナイザ

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

        スレッドがオブジェクト・モニターをロックしていない場合、またはlockedMonitorsfalseの場合、返されるThreadInfoオブジェクトは空のMonitorInfo配列を持ちます。 同様に、スレッドがシンクロナイザをロックしていない場合、またはlockedSynchronizersfalseの場合、返される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 -
        導入されたバージョン:
        10
        関連項目:
        isObjectMonitorUsageSupported(), isSynchronizerUsageSupported()
      • dumpAllThreads

        default ThreadInfo[] dumpAllThreads​(boolean lockedMonitors,
                                            boolean lockedSynchronizers,
                                            int maxDepth)
        指定された最大数の要素と同期情報のスタック・トレースを持つすべてのライブ・スレッドのスレッド情報を返します。maxDepth == 0の場合、スレッドのスタック・トレースはダンプされません。 返された配列に含まれる一部のスレッドは、このメソッドが値を返したときに終了していた可能性があります。

        このメソッドは、getThreadInfo(long[], boolean, boolean, int)メソッドで指定されているThreadInfoオブジェクトの配列を返します。

        実装要件:
        デフォルト実装はUnsupportedOperationExceptionをスローします。
        パラメータ:
        lockedMonitors - trueの場合、ロックされたすべてのモニターをダンプする。
        lockedSynchronizers - trueの場合、ロックされたすべての所有可能なシンクロナイザをダンプする。
        maxDepth - スタック・トレースから取得するStackTraceElementの最大数を示します。
        戻り値:
        すべてのライブ・スレッドのThreadInfoの配列。
        例外:
        IllegalArgumentException - maxDepthが負の場合。
        SecurityException - セキュリティ・マネージャが存在する場合で、呼出し元がManagementPermission("monitor")を持たない場合。
        UnsupportedOperationException -
        導入されたバージョン:
        10
        関連項目:
        isObjectMonitorUsageSupported(), isSynchronizerUsageSupported()