Module  java.management
软件包  java.lang.management

Interface ThreadMXBean

    • 方法详细信息

      • getThreadCount

        int getThreadCount​()
        返回当前线程数,包括守护进程线程和非守护程序线程数。
        结果
        当前线程数。
      • getPeakThreadCount

        int getPeakThreadCount​()
        返回Java虚拟机启动或峰值复位后的峰值活动线程数。
        结果
        峰值线程数。
      • getTotalStartedThreadCount

        long getTotalStartedThreadCount​()
        返回自Java虚拟机启动以来创建并启动的线程总数。
        结果
        总线程数已启动。
      • getDaemonThreadCount

        int getDaemonThreadCount​()
        返回当前的守护进程线程数。
        结果
        当前的守护进程线程数。
      • getAllThreadIds

        long[] getAllThreadIds​()
        返回所有活动线程ID。 返回的数组中包含的某些线程可能会在该方法返回时被终止。
        结果
        一个 long的数组,每个都是一个线程ID。
        异常
        SecurityException - 如果安全管理器存在并且调用者没有ManagementPermission(“监视器”)。
      • getThreadInfo

        ThreadInfo getThreadInfo​(long id)
        返回没有堆栈跟踪的指定的id的线程的线程信息。 这个方法相当于调用:
        getThreadInfo(id, 0);

        此方法返回一个ThreadInfo对象,该对象表示指定ID的线程的线程信息。 返回的ThreadInfo对象中的堆栈跟踪,锁定的监视器和锁定的同步器将为空。 如果给定ID的线程不存在或不存在,则此方法将返回null 如果一个线程已经启动并且尚未死亡,那么线程是活着的。

        MBeanServer访问
        的映射类型ThreadInfoCompositeData与作为指定属性ThreadInfo.from方法。

        参数
        id - 线程的线程ID。 必须是积极的。
        结果
        一个ThreadInfo对象,给定ID的线程没有堆栈跟踪,没有锁定的监视器,没有同步器信息; null如果给定ID的线程不存在或不存在。
        异常
        IllegalArgumentException - 如果是 id <= 0
        SecurityException - 如果安全管理器存在并且调用者没有ManagementPermission(“监视器”)。
      • getThreadInfo

        ThreadInfo[] getThreadInfo​(long[] ids)
        返回其ID为输入数组ids中的每个线程的线程信息,不带堆栈跟踪。 这个方法相当于调用:
           getThreadInfo(ids, 0);
         

        此方法返回ThreadInfo对象的数组。 每个ThreadInfo对象中的堆栈跟踪,锁定的监视器和锁定的同步器将为空。 如果给定ID的线程不存在或不存在,则返回的数组中的相应元素将包含null 如果一个线程已经启动并且尚未死亡,那么线程是活着的。

        MBeanServer访问
        的映射类型ThreadInfoCompositeData与作为指定属性ThreadInfo.from方法。

        参数
        ids - 一个线程ID数组。
        结果
        一个ThreadInfo对象的数组,每个对象包含一个线程的信息,该线程的ID位于ID的输入数组的相应元素中,没有堆栈跟踪,没有锁定的监视器,没有同步器信息。
        异常
        IllegalArgumentException - 如果输入阵列中的任何元素 ids<= 0
        SecurityException - 如果安全管理器存在,并且调用者没有ManagementPermission(“监视器”)。
      • 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的映射类型为CompositeData ,其属性在ThreadInfo.from方法中指定。

        参数
        id - 线程的线程ID。 必须是积极的。
        maxDepth - 要转储的堆栈跟踪中的最大条目数。 可以使用Integer.MAX_VALUE请求整个堆栈进行转储。
        结果
        一个ThreadInfo的给定ID的线程,没有锁定的监视器和同步器信息。 null如果给定ID的线程不存在或不存在。
        异常
        IllegalArgumentException - 如果是 id <= 0
        IllegalArgumentException - 如果是 maxDepth is negative
        SecurityException - 如果安全管理器存在并且调用者没有ManagementPermission(“监视器”)。
      • 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在返回的数组的相应元素中设置null 如果一个线程已经启动并且尚未死亡,那么线程是活着的。

        MBeanServer访问
        的映射类型ThreadInfoCompositeData与作为指定属性ThreadInfo.from方法。

        参数
        ids - 一个线程ID数组
        maxDepth - 要转储的堆栈跟踪中的最大条目数。 可以使用Integer.MAX_VALUE请求整个堆栈被转储。
        结果
        一个ThreadInfo对象的数组,每个对象包含一个线程的信息,该线程的ID位于ID的输入数组的相应元素中,没有锁定的监视器和同步器信息。
        异常
        IllegalArgumentException - 如果是 maxDepth is negative
        IllegalArgumentException - 如果输入数组中的任何元素 ids<= 0
        SecurityException - 如果安全管理器存在并且调用者没有ManagementPermission(“监视器”)。
      • isThreadContentionMonitoringSupported

        boolean isThreadContentionMonitoringSupported​()
        测试Java虚拟机是否支持线程争用监控。
        结果
        true如果Java虚拟机支持线程争用监控; 否则为false
      • setThreadContentionMonitoringEnabled

        void setThreadContentionMonitoringEnabled​(boolean enable)
        启用或禁用线程争用监控。 默认情况下,线程争用监控被禁用。
        参数
        enable - true启用; false禁用。
        异常
        UnsupportedOperationException - 如果Java虚拟机不支持线程争用监控。
        SecurityException - 如果安全管理器存在并且调用者没有ManagementPermission(“控制”)。
        另请参见:
        isThreadContentionMonitoringSupported()
      • getThreadCpuTime

        long getThreadCpuTime​(long id)
        以纳秒为单位返回指定ID的线程的总CPU时间。 返回的值为纳秒精度,但不一定是纳秒精度。 如果实现区分用户模式时间和系统模式时间,则返回的CPU时间是线程在用户模式或系统模式下执行的时间量。

        如果指定ID的线程不存在或不存在,则此方法返回-1 如果禁用CPU时间测量,此方法返回-1 如果一个线程已经启动并且尚未死亡,那么线程是活着的。

        如果在线程启动后启用CPU时间测量,则Java虚拟机实现可以选择任何时间,并将能力启用的时间包括在CPU时间测量开始的时间。

        参数
        id - 线程的线程ID
        结果
        指定ID的线程的线程的总CPU时间存在,线程存活,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时间测量开始的时间。

        参数
        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时间测量。
        结果
        true如果Java虚拟机支持任何线程的CPU时间测量; 否则为false
      • isCurrentThreadCpuTimeSupported

        boolean isCurrentThreadCpuTimeSupported​()
        测试Java虚拟机是否支持当前线程的CPU时间测量。 该方法返回true如果isThreadCpuTimeSupported()回报true
        结果
        true如果Java虚拟机支持当前线程的CPU时间测量; 否则为false
      • findMonitorDeadlockedThreads

        long[] findMonitorDeadlockedThreads​()
        查找处于死锁等待获取对象监视器的线程的循环。 也就是说,在Object.wait调用之后阻止等待进入同步块或等待重新进入同步块的线程,其中每个线程拥有一个监视器,同时尝试获取另一个线程在一个周期中已经持有的另一个监视器。

        更正式地,如果线程是“正在等待拥有的对象监视器”的关系中的循环的一部分,则线程是监视器死锁 在最简单的情况下,线程A被阻塞等待线程B拥有的监视器,并且线程B被阻塞等待线程A拥有的监视器。

        此方法专门用于故障排除,但不用于同步控制。 这可能是一个昂贵的操作。

        此方法发现只涉及对象监视器的死锁。 要查找涉及对象监视器和ownable synchronizers的死锁,应使用findDeadlockedThreads方法。

        结果
        监视死锁的线程的数组(如果有的话); 否则为null
        异常
        SecurityException - 如果安全管理器存在且呼叫者没有ManagementPermission(“监视器”)。
        另请参见:
        findDeadlockedThreads()
      • resetPeakThreadCount

        void resetPeakThreadCount​()
        将峰值线程计数重置为当前线程数。
        异常
        SecurityException - 如果安全管理器存在并且调用者没有ManagementPermission(“控制”)。
        另请参见:
        getPeakThreadCount()getThreadCount()
      • findDeadlockedThreads

        long[] findDeadlockedThreads​()
        查找处于死锁等待获取对象监视器的线程的周期,或ownable synchronizers 线程就被死锁在一个循环,等待这两种类型的锁,如果每个线程拥有一个锁,同时试图获取已经由周期中的另一线程持有另一把锁。

        此方法专门用于故障排除,但不用于同步控制。 这可能是一个昂贵的操作。

        结果
        死锁的线程的数组,等待对象监视器或拥有的同步器(如果有的话); 否则为null
        异常
        SecurityException - 如果安全管理器存在并且调用者没有ManagementPermission(“监视器”)。
        UnsupportedOperationException - 如果Java虚拟机不支持监视可用的同步器使用情况。
        从以下版本开始:
        1.6
        另请参见:
        isSynchronizerUsageSupported()findMonitorDeadlockedThreads()
      • isObjectMonitorUsageSupported

        boolean isObjectMonitorUsageSupported​()
        测试Java虚拟机是否支持监视对象监视器的使用情况。
        结果
        true如果Java虚拟机支持监视对象监视器的使用情况; 否则为false
        从以下版本开始:
        1.6
        另请参见:
        dumpAllThreads(boolean, boolean)
      • isSynchronizerUsageSupported

        boolean isSynchronizerUsageSupported​()
        测试Java虚拟机是否支持 ownable synchronizer使用情况的监控。
        结果
        true如果Java虚拟机支持监视自己的同步器使用情况; 否则为false
        从以下版本开始:
        1.6
        另请参见:
        dumpAllThreads(boolean, boolean)
      • getThreadInfo

        ThreadInfo[] getThreadInfo​(long[] ids,
                                   boolean lockedMonitors,
                                   boolean lockedSynchronizers)
        返回其ID为输入数组ids每个线程的线程信息,具有堆栈跟踪和同步信息。

        该方法获取每个线程的线程信息的快照,包括:

        • 整个堆栈跟踪,
        • 如果lockedMonitorstrue ,那么当前由线程锁定的对象监视器,以及
        • ownable synchronizers线程当前锁定的,如果lockedSynchronizerstrue

        此方法返回一个ThreadInfo对象的数组,每个对象是与ids数组相同索引的线程的线程信息。 如果给定ID的线程不存在或不存在, null在返回的数组的相应元素中设置null 如果一个线程已经启动并且尚未死亡,那么线程是活着的。

        如果一个线程没有锁定任何对象监视器,或者lockedMonitorsfalse ,则返回的ThreadInfo对象将具有一个空的MonitorInfo数组。 同样,如果一个线程没有锁定任何同步器,或者lockedSynchronizersfalse ,返回的ThreadInfo对象将有一个空的LockInfo数组。

        lockedMonitorslockedSynchronizers参数均为false ,相当于调用:

             getThreadInfo(ids, Integer.MAX_VALUE)
         

        此方法专门用于故障排除,但不用于同步控制。 这可能是一个昂贵的操作。

        MBeanServer访问
        的映射类型ThreadInfoCompositeData与作为指定属性ThreadInfo.from方法。

        参数
        ids - 一个线程ID数组。
        lockedMonitors - 如果是 true ,则检索所有锁定的监视器。
        lockedSynchronizers - 如果是 true ,则检索所有锁定的可同步同步器。
        结果
        ThreadInfo对象的数组,每个对象包含有关其ID位于ID的输入数组的相应元素中的线程的信息。
        异常
        SecurityException - 如果安全管理器存在,并且调用者没有ManagementPermission(“监视器”)。
        UnsupportedOperationException -
        从以下版本开始:
        1.6
        另请参见:
        isObjectMonitorUsageSupported()isSynchronizerUsageSupported()