JavaTM 2 Platform
Standard Ed. 6

java.lang.management
介面 ThreadMXBean


public interface ThreadMXBean

Java 虛擬機器執行緒系統的管理介面。

Java 虛擬機器具有此介面的實作類別的單一實例。實作此介面的實例是一個 MXBean,可以通過調用 ManagementFactory.getThreadMXBean() 方法或從平臺 MBeanServer 方法獲得它。

在 MBeanServer 內唯一標識執行緒系統的 MXBean 的 ObjectName 是:

java.lang:type=Threading

執行緒 ID

執行緒 ID 是一個通過調用執行緒的 Thread.getId() 方法返回的 long 型正值。執行緒 ID 在其生存期間是唯一的。執行緒終止時,該執行緒 ID 可以被重新使用。

此介面中的某些方法將執行緒 ID 或執行緒 ID 陣列作為輸入參數,並返回每個執行緒的資訊。

執行緒 CPU 時間

Java 虛擬機器實作可能支持測量當前執行緒的 CPU 時間、測量任何執行緒的 CPU 時間,或者有可能不測量任何執行緒的 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) 方法可以用來獲取執行緒堆疊(stack)空間追蹤和同步資訊,這些資訊包括在獲得執行緒時被哪一個阻塞或者正在等待哪一個鎖,以及執行緒當前擁有哪些鎖。

ThreadMXBean 介面提供 findMonitorDeadlockedThreads()findDeadlockedThreads() 方法,這些方法用於在運行的應用程序中尋找死鎖。

從以下版本開始:
1.5
另請參見:
JMX Specification., 存取 MXBeans 的方式

方法摘要
 ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
          返回所有活動執行緒的執行緒資訊,並帶有堆疊(stack)空間追蹤和同步資訊。
 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 的不具有堆疊(stack)空間追蹤的執行緒的執行緒資訊。
 ThreadInfo[] getThreadInfo(long[] ids)
          返回其 ID 在輸出陣列 ids 中的每個執行緒的執行緒資訊,這些執行緒不具有堆疊(stack)空間追蹤。
 ThreadInfo[] getThreadInfo(long[] ids, boolean lockedMonitors, boolean lockedSynchronizers)
          返回每個執行緒的執行緒資訊,執行緒 ID 位於輸入陣列 ids 中,帶有堆疊(stack)空間追蹤和同步資訊。
 ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)
          返回其 ID 在輸入陣列 ids 中的每個執行緒的執行緒資訊,並帶有指定堆疊(stack)空間追蹤元素數的堆疊(stack)空間追蹤。
 ThreadInfo getThreadInfo(long id, int maxDepth)
          返回指定 id 的執行緒的執行緒資訊,並帶有指定堆疊(stack)空間追蹤元素數的堆疊(stack)空間追蹤。
 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。在返回的陣列中包含的某些執行緒可能在此方法返回時已經終止。

返回:
long 陣列,每個成員都是執行緒 ID。
拋出:
SecurityException - 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。

getThreadInfo

ThreadInfo getThreadInfo(long id)
返回指定 id 的不具有堆疊(stack)空間追蹤的執行緒的執行緒資訊。此方法等效於調用:
getThreadInfo(id, 0);

此方法返回表示指定 ID 的執行緒的執行緒資訊的 ThreadInfo 物件。返回的 ThreadInfo 物件中的堆疊(stack)空間追蹤、鎖定的監視器、鎖定的同步器將為空。 如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則此方法將返回 null。如果執行緒已經啟動且尚未終止,則該執行緒處於活動狀態。

MBeanServer 存取
ThreadInfo 的映射型別為 CompositeData,並具有 ThreadInfo.from 方法指定的那些屬性。

參數:
id - 執行緒的執行緒 ID。必須為正數。
返回:
給定 ID 的執行緒的 ThreadInfo 物件,不帶堆疊(stack)空間追蹤、鎖定的監視器和同步器資訊;如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則返回 null
拋出:
IllegalArgumentException - 如果 id <= 0
SecurityException - 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。

getThreadInfo

ThreadInfo[] getThreadInfo(long[] ids)
返回其 ID 在輸出陣列 ids 中的每個執行緒的執行緒資訊,這些執行緒不具有堆疊(stack)空間追蹤。此方法等效於調用:
   getThreadInfo(ids, 0);
 

此方法返回 ThreadInfo 物件陣列。每個 ThreadInfo 物件中的堆疊(stack)空間追蹤、鎖定的監視器、鎖定的同步器將為空。 如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則返回陣列中的對應元素將包含 null。如果執行緒已經啟動且尚未終止,則該執行緒處於活動狀態。

MBeanServer 存取
ThreadInfo 的映射型別為 CompositeData,具有 ThreadInfo.from 方法指定的那些屬性。

參數:
ids - 執行緒 ID 陣列。
返回:
一個 ThreadInfo 物件的陣列,每個陣列元素均包含關於執行緒的資訊,該執行緒 ID 在 ID 輸入陣列的對應元素中,不帶堆疊(stack)空間追蹤、鎖定的監視器和同步器資訊。
拋出:
IllegalArgumentException - 如果輸入陣列 ids 中的任何元素 <= 0
SecurityException - 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。

getThreadInfo

ThreadInfo getThreadInfo(long id,
                         int maxDepth)
返回指定 id 的執行緒的執行緒資訊,並帶有指定堆疊(stack)空間追蹤元素數的堆疊(stack)空間追蹤。maxDepth 參數指示可從堆疊(stack)空間追蹤獲取的 StackTraceElement 的最大數目。如果 maxDepth == Integer.MAX_VALUE,則將轉儲執行緒的整個堆疊(stack)空間追蹤。如果 maxDepth == 0,則不轉儲執行緒的任何堆疊(stack)空間追蹤。此方法不獲取執行緒的鎖定的監視器和鎖定同步器。

當 Java 虛擬機器沒有關於執行緒的堆疊(stack)空間追蹤資訊或 maxDepth == 0 時,ThreadInfo 物件中的堆疊(stack)空間追蹤將為空的 StackTraceElement 陣列。

如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則此方法將返回 null。如果執行緒已經啟動且尚未終止,則該執行緒處於活動狀態。

MBeanServer 存取
ThreadInfo 的映射型別為 CompositeData,具有 ThreadInfo.from 方法指定的那些屬性。

參數:
id - 執行緒的執行緒 ID。必須為正數。
maxDepth - 要轉儲的堆疊(stack)空間追蹤中的最大項數。Integer.MAX_VALUE 可用於請求將整個堆疊(stack)空間轉儲。
返回:
給定 ID 的執行緒的 ThreadInfo,不帶鎖定的監視器和同步器資訊。如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則返回 null
拋出:
IllegalArgumentException - 如果 id <= 0
IllegalArgumentException - 如果 maxDepth 為負數
SecurityException - 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。

getThreadInfo

ThreadInfo[] getThreadInfo(long[] ids,
                           int maxDepth)
返回其 ID 在輸入陣列 ids 中的每個執行緒的執行緒資訊,並帶有指定堆疊(stack)空間追蹤元素數的堆疊(stack)空間追蹤。maxDepth 參數指示可從堆疊(stack)空間追蹤獲取的 StackTraceElement 的最大數目。如果 maxDepth == Integer.MAX_VALUE,則將轉儲執行緒的整個堆疊(stack)空間追蹤。如果 maxDepth == 0,則不轉儲執行緒的任何堆疊(stack)空間追蹤。此方法不獲取執行緒的鎖定的監視器和鎖定同步器。

當 Java 虛擬機器沒有關於執行緒的堆疊(stack)空間追蹤資訊或 maxDepth == 0 時,ThreadInfo 物件中的堆疊(stack)空間追蹤將為空的 StackTraceElement 陣列。

此方法返回一個 ThreadInfo 物件的陣列,其每個成員均為關於執行緒的執行緒資訊,索引順序與 ids 陣列中索引相同。如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則返回陣列中的對應元素將設置為 null。如果執行緒已經啟動且尚未終止,則該執行緒處於活動狀態。

MBeanServer 存取
ThreadInfo 的映射型別為 CompositeData,具有 ThreadInfo.from 方法指定的那些屬性。

參數:
ids - 執行緒 ID 陣列
maxDepth - 要轉儲的堆疊(stack)空間追蹤中的最大項數。Integer.MAX_VALUE 可用於請求將整個堆疊(stack)空間轉儲。
返回:
一個 ThreadInfo 物件組成的陣列,每個陣列元素均包含關於執行緒的資訊,該執行緒 ID 在 ID 輸入陣列的對應元素中,不帶鎖定的監視器和同步器資訊。
拋出:
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 時間測量的時間,包括啟用此功能的時間。

參數:
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 時間測量的時間,包括啟用此功能的時間。

參數:
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 調用後等待重新進入同步塊,此時每個執行緒擁有一個監視器,且同時試圖獲取已經由週期中的另一個執行緒擁有的另一個監視器。

更正式地說,如果執行緒屬於某個週期,處於「等待已被佔用的物件監視器」的關係中,則該執行緒處於監視器死鎖 狀態。在最簡單的情況下,執行緒 A 被阻塞,在等待執行緒 B 擁有的監視器,而執行緒 B 也被阻塞,在等待執行緒 A 擁有的監視器。

此方法設計用於進行故障排除,但不適合進行同步控制。它可能成為開銷很大的操作。

此方法只尋找涉及物件監視器的死鎖。要尋找涉及物件監視器和可擁有同步器的死鎖,應該使用 findDeadlockedThreads 方法。

返回:
處於監視器死鎖狀態的執行緒(如果有)的 ID 陣列;否則返回 null
拋出:
SecurityException - 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。
另請參見:
findDeadlockedThreads()

resetPeakThreadCount

void resetPeakThreadCount()
將峰值執行緒計數重置為當前活動執行緒的數量。

拋出:
SecurityException - 如果存在安全管理器,且調用方不具有 ManagementPermission(("control")。
另請參見:
getPeakThreadCount(), getThreadCount()

findDeadlockedThreads

long[] findDeadlockedThreads()
尋找因為等待獲得物件監視器或可擁有同步器而處於死鎖狀態的執行緒循環。如果每個執行緒擁有一個鎖,當試圖從另一個處於循環中的執行緒獲取其持有的鎖時,執行緒會在循環中處於死鎖 狀態,等待這兩種鎖。

此方法設計用於故障排除,不用於異常控制。它是一個開銷很大的操作。

返回:
執行緒的 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

ThreadInfo[] getThreadInfo(long[] ids,
                           boolean lockedMonitors,
                           boolean lockedSynchronizers)
返回每個執行緒的執行緒資訊,執行緒 ID 位於輸入陣列 ids 中,帶有堆疊(stack)空間追蹤和同步資訊。

此方法獲取每個執行緒的執行緒資訊快照,包括:

此方法返回 ThreadInfo 物件陣列,每個陣列元素是關於執行緒的執行緒資訊,該執行緒帶有與 ids 陣列中相同的索引。如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則返回陣列中的對應元素將被設置為 null。如果一個執行緒已經啟動且尚未關閉,則稱該執行緒是活動的。

如果執行緒沒有鎖定任何物件監視器或 lockedMonitorsfalse,那麼返回的 ThreadInfo 物件將有一個空 MonitorInfo 陣列。類似地,如果執行緒沒有鎖定任何同步器或 lockedSynchronizersfalse,那麼返回的 ThreadInfo 物件將有一個空 LockInfo 陣列。

lockedMonitorslockedSynchronizers 參數均為 false 時,它等效於調用:

     getThreadInfo(ids, Integer.MAX_VALUE)
 

此方法設計用於故障排除,不用於異常控制。它是一個開銷很大的操作。

MBeanServer 存取
ThreadInfo 的映射型別為 CompositeData,並帶有 ThreadInfo.from 方法指定的屬性。

參數:
ids - 執行緒 ID 陣列。
lockedMonitors - 如果為 true,則獲取所有鎖定的監視器。
lockedSynchronizers - 如果為 true,則獲取所有鎖定的可擁有同步器。
返回:
ThreadInfo 物件陣列,每個陣列元素包含有關執行緒的資訊,該執行緒的 ID 在 ID 輸入陣列的對應元素中。
拋出:
SecurityException - 如果安全管理器存在,且調用者沒有 ManagementPermission("monitor")。
UnsupportedOperationException -
從以下版本開始:
1.6
另請參見:
isObjectMonitorUsageSupported(), isSynchronizerUsageSupported()

dumpAllThreads

ThreadInfo[] dumpAllThreads(boolean lockedMonitors,
                            boolean lockedSynchronizers)
返回所有活動執行緒的執行緒資訊,並帶有堆疊(stack)空間追蹤和同步資訊。 當此方法返回時,返回陣列中包含的一些執行緒可能已經終止。

此方法返回 ThreadInfo 物件陣列,ThreadInfo 物件是使用 getThreadInfo(long[], boolean, boolean) 方法指定的。

參數:
lockedMonitors - 如果為 true,則轉儲所有鎖定的監視器。
lockedSynchronizers - 如果為 true,則轉儲所有鎖定的可擁有同步器。
返回:
所有活動執行緒的 ThreadInfo 陣列。
拋出:
SecurityException - 如果安全管理器存在,且調用者沒有 ManagementPermission("monitor")。
UnsupportedOperationException -
從以下版本開始:
1.6
另請參見:
isObjectMonitorUsageSupported(), isSynchronizerUsageSupported()

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only