|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface ThreadMXBean
Java 虛擬機器執行緒系統的管理介面。
Java 虛擬機器具有此介面的實作類別的單一實例。實作此介面的實例是一個 MXBean,可以通過調用 ManagementFactory.getThreadMXBean()
方法或從平臺 MBeanServer
方法獲得它。
在 MBeanServer 內唯一標識執行緒系統的 MXBean 的 ObjectName 是:
java.lang:type=Threading
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)
方法可以用來獲取執行緒堆疊(stack)空間追蹤和同步資訊,這些資訊包括在獲得執行緒時被哪一個鎖阻塞或者正在等待哪一個鎖,以及執行緒當前擁有哪些鎖。
ThreadMXBean 介面提供 findMonitorDeadlockedThreads()
和 findDeadlockedThreads()
方法,這些方法用於在運行的應用程序中尋找死鎖。
方法摘要 | |
---|---|
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 時間測量。 |
方法詳細資訊 |
---|
int getThreadCount()
int getPeakThreadCount()
long getTotalStartedThreadCount()
int getDaemonThreadCount()
long[] getAllThreadIds()
SecurityException
- 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。ThreadInfo getThreadInfo(long id)
getThreadInfo(id, 0);
此方法返回表示指定 ID 的執行緒的執行緒資訊的 ThreadInfo 物件。返回的 ThreadInfo 物件中的堆疊(stack)空間追蹤、鎖定的監視器、鎖定的同步器將為空。 如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則此方法將返回 null。如果執行緒已經啟動且尚未終止,則該執行緒處於活動狀態。
MBeanServer 存取:
ThreadInfo 的映射型別為 CompositeData,並具有 ThreadInfo.from
方法指定的那些屬性。
id
- 執行緒的執行緒 ID。必須為正數。
ThreadInfo
物件,不帶堆疊(stack)空間追蹤、鎖定的監視器和同步器資訊;如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則返回 null。
IllegalArgumentException
- 如果 id <= 0。
SecurityException
- 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。ThreadInfo[] getThreadInfo(long[] ids)
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")。ThreadInfo getThreadInfo(long id, int maxDepth)
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)空間轉儲。
ThreadInfo
,不帶鎖定的監視器和同步器資訊。如果給定 ID 的執行緒沒有處於活動狀態,或不存在,則返回 null。
IllegalArgumentException
- 如果 id <= 0。
IllegalArgumentException
- 如果 maxDepth 為負數。
SecurityException
- 如果存在安全管理器,且調用方不具有 ManagementPermission("monitor")。ThreadInfo[] getThreadInfo(long[] ids, int maxDepth)
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")。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。如果執行緒已經啟動且尚未終止,則該執行緒處於活動狀態。
如果執行緒啟動後啟用了 CPU 時間測量,Java 虛擬機器實作可能選擇任何時間作為啟動 CPU 時間測量的時間,包括啟用此功能的時間。
id
- 執行緒的執行緒 ID
IllegalArgumentException
- 如果 id <= 0。
UnsupportedOperationException
- 如果 Java 虛擬機器不支持其他執行緒的 CPU 時間測定。getThreadUserTime(long)
,
isThreadCpuTimeSupported()
,
isThreadCpuTimeEnabled()
,
setThreadCpuTimeEnabled(boolean)
long getThreadUserTime(long id)
如果指定 ID 的執行緒沒有處於活動狀態,或不存在,則此方法將返回 -1。如果禁用 CPU 時間測量,此方法將返回 -1。如果執行緒已經啟動且尚未終止,則該執行緒處於活動狀態。
如果執行緒啟動後啟用了 CPU 時間測量,Java 虛擬機器實作可能選擇任何時間作為啟動 CPU 時間測量的時間,包括啟用此功能的時間。
id
- 執行緒的執行緒 ID
IllegalArgumentException
- 如果 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
調用後等待重新進入同步塊,此時每個執行緒擁有一個監視器,且同時試圖獲取已經由週期中的另一個執行緒擁有的另一個監視器。
更正式地說,如果執行緒屬於某個週期,處於「等待已被佔用的物件監視器」的關係中,則該執行緒處於監視器死鎖 狀態。在最簡單的情況下,執行緒 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。如果一個執行緒已經啟動且尚未關閉,則稱該執行緒是活動的。
如果執行緒沒有鎖定任何物件監視器或 lockedMonitors 為 false,那麼返回的 ThreadInfo 物件將有一個空 MonitorInfo 陣列。類似地,如果執行緒沒有鎖定任何同步器或 lockedSynchronizers 為 false,那麼返回的 ThreadInfo 物件將有一個空 LockInfo 陣列。
當 lockedMonitors 和 lockedSynchronizers 參數均為 false 時,它等效於調用:
getThreadInfo(ids, Integer.MAX_VALUE)
此方法設計用於故障排除,不用於異常控制。它是一個開銷很大的操作。
MBeanServer 存取:
ThreadInfo 的映射型別為 CompositeData,並帶有 ThreadInfo.from
方法指定的屬性。
ids
- 執行緒 ID 陣列。lockedMonitors
- 如果為 true,則獲取所有鎖定的監視器。lockedSynchronizers
- 如果為 true,則獲取所有鎖定的可擁有同步器。
ThreadInfo
物件陣列,每個陣列元素包含有關執行緒的資訊,該執行緒的 ID 在 ID 輸入陣列的對應元素中。
SecurityException
- 如果安全管理器存在,且調用者沒有 ManagementPermission("monitor")。
UnsupportedOperationException
- isObjectMonitorUsageSupported()
,
isSynchronizerUsageSupported()
ThreadInfo[] dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)
此方法返回 ThreadInfo
物件陣列,ThreadInfo 物件是使用 getThreadInfo(long[], boolean, boolean)
方法指定的。
lockedMonitors
- 如果為 true,則轉儲所有鎖定的監視器。lockedSynchronizers
- 如果為 true,則轉儲所有鎖定的可擁有同步器。
ThreadInfo
陣列。
SecurityException
- 如果安全管理器存在,且調用者沒有 ManagementPermission("monitor")。
UnsupportedOperationException
- isObjectMonitorUsageSupported()
,
isSynchronizerUsageSupported()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。