|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.lang.Thread
public class Thread
執行緒 是程序中的執行執行緒。Java 虛擬機器允許應用程序共時地運行多個執行執行緒。
每個執行緒都有一個優先級,高優先級執行緒的執行優先於低優先級執行緒。每個執行緒都可以或不可以標記為一個守護程序。當某個執行緒中運行的程式碼創建一個新 Thread
物件時,該新執行緒的初始優先級被設定為創建執行緒的優先級,並且當且僅當創建執行緒是守護執行緒時,新執行緒才是守護程序。
當 Java 虛擬機器啟動時,通常都會有單個非守護執行緒(它通常會調用某個指定類別的 main
方法)。Java 虛擬機器會繼續執行執行緒,直到下列任一情況出現時為止:
Runtime
類別的 exit
方法,並且安全管理器允許退出操作發生。
run
方法之外的異常。
創建新執行執行緒有兩種方法。一種方法是將類別宣告為 Thread
的子類別。該子類別應覆寫 Thread
類別的 run
方法。接下來可以分派並啟動該子類別的實例。例如,計算大於某一規定值的質數的執行緒可以寫成:
class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
然後,下列程式碼會創建並啟動一個執行緒:
PrimeThread p = new PrimeThread(143); p.start();
創建執行緒的另一種方法是宣告實作 Runnable
介面的類別。該類別然後實作 run
方法。然後可以分派該類別的實例,在創建 Thread
時作為一個參數來傳遞並啟動。採用這種樣式的同一個例子如下所示:
class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
然後,下列程式碼會創建並啟動一個執行緒:
PrimeRun p = new PrimeRun(143); new Thread(p).start();
每個執行緒都有一個標識名,多個執行緒可以同名。如果執行緒創建時沒有指定標識名,就會為其產生一個新名稱。
Runnable
,
Runtime.exit(int)
,
run()
,
stop()
巢狀類別摘要 | |
---|---|
static class |
Thread.State
執行緒狀態。 |
static interface |
Thread.UncaughtExceptionHandler
當 Thread 因未捕獲的異常而突然終止時,調用處理程序的介面。 |
欄位摘要 | |
---|---|
static int |
MAX_PRIORITY
執行緒可以具有的最高優先級。 |
static int |
MIN_PRIORITY
執行緒可以具有的最低優先級。 |
static int |
NORM_PRIORITY
分派給執行緒的預設優先級。 |
建構子摘要 | |
---|---|
Thread()
分派新的 Thread 物件。 |
|
Thread(Runnable target)
分派新的 Thread 物件。 |
|
Thread(Runnable target,
String name)
分派新的 Thread 物件。 |
|
Thread(String name)
分派新的 Thread 物件。 |
|
Thread(ThreadGroup group,
Runnable target)
分派新的 Thread 物件。 |
|
Thread(ThreadGroup group,
Runnable target,
String name)
分派新的 Thread 物件,以便將 target 作為其運行物件,將指定的 name 作為其名稱,並作為 group 所參考的執行緒組的一員。 |
|
Thread(ThreadGroup group,
Runnable target,
String name,
long stackSize)
分派新的 Thread 物件,以便將 target 作為其運行物件,將指定的 name 作為其名稱,作為 group 所參考的執行緒組的一員,並具有指定的堆疊(stack)空間大小。 |
|
Thread(ThreadGroup group,
String name)
分派新的 Thread 物件。 |
方法摘要 | |
---|---|
static int |
activeCount()
返回當前執行緒的執行緒組中活動執行緒的數目。 |
void |
checkAccess()
判定當前運行的執行緒是否有權修改該執行緒。 |
int |
countStackFrames()
已過時。 該調用的定義依賴於 suspend() ,但它遭到了反對。此外,該調用的結果從來都不是意義明確的。 |
static Thread |
currentThread()
返回對當前正在執行的執行緒物件的參考。 |
void |
destroy()
已過時。 該方法最初用於破壞該執行緒,但不作任何清除。它所保持的任何監視器都會保持鎖定狀態。不過,該方法決不會被實作。即使要實作,它也極有可能以 suspend() 方式被死鎖。如果目標執行緒被破壞時保持一個保護關鍵系統資源的鎖,則任何執行緒在任何時候都無法再次存取該資源。如果另一個執行緒曾試圖鎖定該資源,則會出現死鎖。這類別死鎖通常會證明它們自己是「凍結」的進程。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。 |
static void |
dumpStack()
將當前執行緒的堆疊(stack)空間追蹤列印至標準錯誤串流。 |
static int |
enumerate(Thread[] tarray)
將當前執行緒的執行緒組及其子組中的每一個活動執行緒複製到指定的陣列中。 |
static Map<Thread,StackTraceElement[]> |
getAllStackTraces()
返回所有活動執行緒的堆疊(stack)空間追蹤的一個映射。 |
ClassLoader |
getContextClassLoader()
返回該執行緒的上下文 ClassLoader。 |
static Thread.UncaughtExceptionHandler |
getDefaultUncaughtExceptionHandler()
返回執行緒由於未捕獲到異常而突然終止時調用的預設處理程序。 |
long |
getId()
返回該執行緒的標識符。 |
String |
getName()
返回該執行緒的名稱。 |
int |
getPriority()
返回執行緒的優先級。 |
StackTraceElement[] |
getStackTrace()
返回一個表示該執行緒堆疊(stack)空間轉儲的堆疊(stack)空間追蹤元素陣列。 |
Thread.State |
getState()
返回該執行緒的狀態。 |
ThreadGroup |
getThreadGroup()
返回該執行緒所屬的執行緒組。 |
Thread.UncaughtExceptionHandler |
getUncaughtExceptionHandler()
返回該執行緒由於未捕獲到異常而突然終止時調用的處理程序。 |
static boolean |
holdsLock(Object obj)
當且僅當當前執行緒在指定的物件上保持監視器鎖時,才返回 true。 |
void |
interrupt()
中斷執行緒。 |
static boolean |
interrupted()
測試當前執行緒是否已經中斷。 |
boolean |
isAlive()
測試執行緒是否處於活動狀態。 |
boolean |
isDaemon()
測試該執行緒是否為守護執行緒。 |
boolean |
isInterrupted()
測試執行緒是否已經中斷。 |
void |
join()
等待該執行緒終止。 |
void |
join(long millis)
等待該執行緒終止的時間最長為 millis 毫秒。 |
void |
join(long millis,
int nanos)
等待該執行緒終止的時間最長為 millis 毫秒 + nanos 納秒。 |
void |
resume()
已過時。 該方法只與 suspend() 一起使用,但 suspend() 已經遭到反對,因為它具有死鎖傾向。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。 |
void |
run()
如果該執行緒是使用獨立的 Runnable 運行物件建構的,則調用該 Runnable 物件的 run 方法;否則,該方法不執行任何操作並返回。 |
void |
setContextClassLoader(ClassLoader cl)
設置該執行緒的上下文 ClassLoader。 |
void |
setDaemon(boolean on)
將該執行緒標記為守護執行緒或使用者執行緒。 |
static void |
setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設置當執行緒由於未捕獲到異常而突然終止,並且沒有為該執行緒定義其他處理程序時所調用的預設處理程序。 |
void |
setName(String name)
改變執行緒名稱,使之與參數 name 相同。 |
void |
setPriority(int newPriority)
更改執行緒的優先級。 |
void |
setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設置該執行緒由於未捕獲到異常而突然終止時調用的處理程序。 |
static void |
sleep(long millis)
在指定的毫秒數內讓當前正在執行的執行緒休眠(暫停執行),此操作受到系統計時器和排程程序精度和準確性的影響。 |
static void |
sleep(long millis,
int nanos)
在指定的毫秒數加指定的納秒數內讓當前正在執行的執行緒休眠(暫停執行),此操作受到系統計時器和排程程序精度和準確性的影響。 |
void |
start()
使該執行緒開始執行;Java 虛擬機器調用該執行緒的 run 方法。 |
void |
stop()
已過時。 該方法具有固有的不安全性。用 Thread.stop 來終止執行緒將釋放它已經鎖定的所有監視器(作為沿堆疊(stack)空間向上傳播的未檢查 ThreadDeath 異常的一個自然後果)。如果以前受這些監視器保護的任何對象都處於一種不一致的狀態,則損壞的物件將對其他執行緒可見,這有可能導致任意的行為。stop 的許多使用都應由只修改某些變數以指示目標執行緒應該停止運行的程式碼來取代。目標執行緒應定期檢查該變數,並且如果該變數指示它要停止運行,則從其運行方法依次返回。如果目標執行緒等待很長時間(例如基於一個條件變數),則應使用 interrupt 方法來中斷該等待。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。 |
void |
stop(Throwable obj)
已過時。 該方法具有固有的不安全性。有關詳細資訊,請參閱 stop() 。
該方法的附加危險是它可用於產生目標執行緒未準備處理的異常(包括若沒有該方法該執行緒不太可能拋出的已檢查的異常)。
有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。 |
void |
suspend()
已過時。 該方法已經遭到反對,因為它具有固有的死鎖傾向。如果目標執行緒掛起時在保護關鍵系統資源的監視器上保持有鎖,則在目標執行緒重新開始以前任何執行緒都不能存取該資源。如果重新開始目標執行緒的執行緒想在調用 resume 之前鎖定該監視器,則會發生死鎖。這類別死鎖通常會證明自己是「凍結」的進程。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。 |
String |
toString()
返回該執行緒的字元串表示形式,包括執行緒名稱、優先級和執行緒組。 |
static void |
yield()
暫停當前正在執行的執行緒物件,並執行其他執行緒。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
欄位詳細資訊 |
---|
public static final int MIN_PRIORITY
public static final int NORM_PRIORITY
public static final int MAX_PRIORITY
建構子詳細資訊 |
---|
public Thread()
Thread
物件。這種建構子與 Thread(null, null,
gname)
具有相同的作用,其中 gname 是一個新產生的名稱。自動產生的名稱的形式為 "Thread-"+
n,其中的 n 為整數。
Thread(ThreadGroup, Runnable, String)
public Thread(Runnable target)
Thread
物件。這種建構子與 Thread(null, target,
gname)
具有相同的作用,其中的 gname 是一個新產生的名稱。自動產生的名稱的形式為 「Thread-」+
n,其中的 n 為整數。
target
- 其 run
方法被調用的物件。Thread(ThreadGroup, Runnable, String)
public Thread(ThreadGroup group, Runnable target)
Thread
物件。這種建構子與 Thread(group, target,
gname)
具有相同的作用,其中的 gname 是一個新產生的名稱。自動產生的名稱的形式為 "Thread-"+
n ,其中的 n 為整數。
group
- 執行緒組。target
- 其 run
方法被調用的物件。
SecurityException
- 如果當前執行緒無法在指定的執行緒組中創建執行緒。Thread(ThreadGroup, Runnable, String)
public Thread(String name)
Thread
物件。這種建構子與 Thread(null, null, name)
具有相同的作用。
name
- 新執行緒的名稱。Thread(ThreadGroup, Runnable, String)
public Thread(ThreadGroup group, String name)
Thread
物件。這種建構子與 Thread(group, null, name)
具有相同的作用。
group
- 執行緒組。name
- 新執行緒的名稱。
SecurityException
- 如果當前執行緒無法在指定的執行緒組中創建執行緒。Thread(ThreadGroup, Runnable, String)
public Thread(Runnable target, String name)
Thread
物件。這種建構子與 Thread(null, target, name)
具有相同的作用。
target
- 其 run
方法被調用的物件。name
- 新執行緒的名稱。Thread(ThreadGroup, Runnable, String)
public Thread(ThreadGroup group, Runnable target, String name)
Thread
物件,以便將 target
作為其運行物件,將指定的 name
作為其名稱,並作為 group
所參考的執行緒組的一員。
如果 group
為 null
,並且有安全管理器,則該組由安全管理器的 getThreadGroup
方法確定。如果 group
為 null
,並且沒有安全管理器,或安全管理器的 getThreadGroup
方法返回 null
,則該組與創建新執行緒的執行緒被設定為相同的 ThreadGroup。
如果有安全管理器,則其 checkAccess
方法通過 ThreadGroup 作為其參數被調用。
此外,當被覆寫 getContextClassLoader
或 setContextClassLoader
方法的子類別建構子直接或間接調用時,其 checkPermission
方法通過 RuntimePermission("enableContextClassLoaderOverride")
權限調用。其結果可能是 SecurityException。
如果 target
參數不是 null
,則 target
的 run
方法在啟動該執行緒時調用。如果 target 參數為 null
,則該執行緒的 run
方法在該執行緒啟動時調用。
新創建執行緒的優先級被設定為創建該執行緒的執行緒的優先級,即當前正在運行的執行緒的優先級。方法 setPriority
可用於將優先級更改為一個新值。
當且僅當創建新執行緒的執行緒當前被標記為守護執行緒時,新創建的執行緒才被標記為守護執行緒。方法 setDaemon
可用於改變執行緒是否為守護執行緒。
group
- 執行緒組。target
- 其 run
方法被調用的物件。name
- 新執行緒的名稱。
SecurityException
- 如果當前執行緒無法在指定的執行緒組中創建執行緒,或者無法覆寫上下文類別載入器方法。Runnable.run()
,
run()
,
setDaemon(boolean)
,
setPriority(int)
,
ThreadGroup.checkAccess()
,
SecurityManager.checkAccess(java.lang.Thread)
public Thread(ThreadGroup group, Runnable target, String name, long stackSize)
Thread
物件,以便將 target
作為其運行物件,將指定的 name
作為其名稱,作為 group
所參考的執行緒組的一員,並具有指定的堆疊(stack)空間大小。
除了允許指定執行緒堆疊(stack)空間大小以外,這種建構子與 Thread(ThreadGroup,Runnable,String)
完全一樣。堆疊(stack)空間大小是虛擬機器要為該執行緒堆疊(stack)空間分派的位址空間的近似位元組數。
stackSize 參數(如果有)的作用具有高度的平臺依賴性。
在某些平臺上,指定一個較高的 stackSize 參數值可能使執行緒在拋出 StackOverflowError
之前達到較大的遞歸深度。同樣,指定一個較低的值將允許較多的執行緒共時地存在,且不會拋出 OutOfMemoryError
(或其他內部錯誤)。stackSize 參數的值與最大遞歸深度和共時程度之間的關係細節與平臺有關。在某些平臺上,stackSize 參數的值無論如何不會起任何作用。
作為建議,可以讓虛擬機器自由處理 stackSize 參數。如果指定值對於平臺來說過低,則虛擬機器可能使用某些特定於平臺的最小值;如果指定值過高,則虛擬機器可能使用某些特定於平臺的最大值。 同樣,虛擬機器還會視情況自由地捨入指定值(或完全忽略它)。
將 stackSize 參數值指定為零將使這種建構子與 Thread(ThreadGroup, Runnable, String) 建構子具有完全相同的作用。
由於這種建構子的行為具有平臺依賴性,因此在使用它時要非常小心。執行特定計算所必需的執行緒堆疊(stack)空間大小可能會因 JRE 實作的不同而不同。鑒於這種不同,仔細調整堆疊(stack)空間大小參數可能是必需的,而且可能要在支持應用程序運行的 JRE 實作上反覆調整。
實作注意事項:鼓勵 Java 平臺實作者文檔化其 stackSize parameter 的實作行為。
group
- 執行緒組。target
- 其 run
方法被調用的物件。name
- 新執行緒的名稱。stackSize
- 新執行緒的預期堆疊(stack)空間大小,為零時表示忽略該參數。
SecurityException
- 如果當前執行緒無法在指定的執行緒組中創建執行緒。方法詳細資訊 |
---|
public static Thread currentThread()
public static void yield()
public static void sleep(long millis) throws InterruptedException
millis
- 以毫秒為單位的休眠時間。
InterruptedException
- 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。Object.notify()
public static void sleep(long millis, int nanos) throws InterruptedException
millis
- 以毫秒為單位的休眠時間。nanos
- 要休眠的另外 0-999999 納秒。
IllegalArgumentException
- 如果 millis 值為負或 nanos 值不在 0-999999 範圍內。
InterruptedException
- 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。Object.notify()
public void start()
run
方法。
結果是兩個執行緒共時地運行;當前執行緒(從調用返回給 start
方法)和另一個執行緒(執行其 run
方法)。
多次啟動一個執行緒是非法的。特別是當執行緒已經結束執行後,不能再重新啟動。
IllegalThreadStateException
- 如果執行緒已經啟動。run()
,
stop()
public void run()
Runnable
運行物件建構的,則調用該 Runnable
物件的 run
方法;否則,該方法不執行任何操作並返回。
Thread
的子類別應該覆寫該方法。
Runnable
中的 run
start()
,
stop()
,
Thread(ThreadGroup, Runnable, String)
@Deprecated public final void stop()
ThreadDeath
異常的一個自然後果)。如果以前受這些監視器保護的任何對象都處於一種不一致的狀態,則損壞的物件將對其他執行緒可見,這有可能導致任意的行為。stop
的許多使用都應由只修改某些變數以指示目標執行緒應該停止運行的程式碼來取代。目標執行緒應定期檢查該變數,並且如果該變數指示它要停止運行,則從其運行方法依次返回。如果目標執行緒等待很長時間(例如基於一個條件變數),則應使用 interrupt
方法來中斷該等待。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。
如果安裝了安全管理器,則以 this
作為其參數調用 checkAccess
方法。這可能引發 SecurityException
(在當前執行緒中)。
如果該執行緒不同於當前執行緒(即當前執行緒試圖終止除它本身以外的某一執行緒),則安全管理器的 checkPermission
方法(帶有 RuntimePermission("stopThread")
參數)也會被調用。這會再次拋出 SecurityException
(在當前執行緒中)。
無論該執行緒在做些什麼,它所代表的執行緒都被迫異常停止,並拋出一個新創建的 ThreadDeath
物件,作為異常。
停止一個尚未啟動的執行緒是允許的。 如果最後啟動了該執行緒,它會立即終止。
應用程序通常不應試圖捕獲 ThreadDeath
,除非它必須執行某些異常的清除操作(注意,拋出 ThreadDeath
將導致 try
語句的 finally
子句在執行緒正式終止前執行)。如果 catch
子句捕獲了一個 ThreadDeath
物件,則重新拋出該物件很重要,因為這樣該執行緒才會真正終止。
對其他未捕獲的異常作出反應的頂級錯誤處理程序不會列印輸出訊息,或者另外通知應用程序未捕獲到的異常是否為 ThreadDeath
的一個實例。
SecurityException
- 如果當前執行緒不能修改該執行緒。interrupt()
,
checkAccess()
,
run()
,
start()
,
ThreadDeath
,
ThreadGroup.uncaughtException(Thread,Throwable)
,
SecurityManager.checkAccess(Thread)
,
SecurityManager.checkPermission(java.security.Permission)
@Deprecated public final void stop(Throwable obj)
stop()
。
該方法的附加危險是它可用於產生目標執行緒未準備處理的異常(包括若沒有該方法該執行緒不太可能拋出的已檢查的異常)。
有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。
如果安裝了安全管理器,則調用該執行緒的 checkAccess
方法,這可能引發 SecurityException
(在當前執行緒中)。
如果該執行緒不同於當前執行緒(即當前執行緒試圖終止除它本身以外的某一執行緒),或者 obj
不是 ThreadDeath
的一個實例,則安全管理器的 checkPermission
方法(帶有 RuntimePermission("stopThread")
參數)也會被調用。
此外,這可能拋出 SecurityException
(在當前執行緒中)。
如果參數 obj
為 null,則拋出 NullPointerException
(在當前執行緒中)。
無論該執行緒在做些什麼,它所代表的執行緒都被迫異常停止,並拋出 Throwable
物件 obj
,作為一個異常。這是一種不正常的操作,通常情況下,應使用不帶任何參數的 stop
方法。
停止一個尚未啟動的執行緒是允許的。 如果最後啟動了該執行緒,它會立即終止。
obj
- 要拋出的可拋出物件。
SecurityException
- 如果當前執行緒不能修改該執行緒。
NullPointerException
- 如果 obj 為 null。interrupt()
,
checkAccess()
,
run()
,
start()
,
stop()
,
SecurityManager.checkAccess(Thread)
,
SecurityManager.checkPermission(java.security.Permission)
public void interrupt()
如果當前執行緒沒有中斷它自己(這在任何情況下都是允許的),則該執行緒的 checkAccess
方法就會被調用,這可能拋出 SecurityException
。
如果執行緒在調用 Object
類別的 wait()
、wait(long)
或 wait(long, int)
方法,或者該類別的 join()
、join(long)
、join(long, int)
、sleep(long)
或 sleep(long, int)
方法過程中受阻,則其中斷狀態將被清除,它還將收到一個 InterruptedException
。
如果該執行緒在可中斷的通道
上的 I/O 操作中受阻,則該通道將被關閉,該執行緒的中斷狀態將被設置並且該執行緒將收到一個
ClosedByInterruptException
。
如果該執行緒在一個 Selector
中受阻,則該執行緒的中斷狀態將被設置,它將立即從選擇操作返回,並可能帶有一個非零值,就好像調用了選擇器的 wakeup
方法一樣。
如果以前的條件都沒有保存,則該執行緒的中斷狀態將被設置。
中斷一個不處於活動狀態的執行緒不需要任何作用。
SecurityException
- 如果當前執行緒無法修改該執行緒public static boolean interrupted()
執行緒中斷被忽略,因為在中斷時不處於活動狀態的執行緒將由此返回 false 的方法反映出來。
true
;否則返回 false
。isInterrupted()
public boolean isInterrupted()
執行緒中斷被忽略,因為在中斷時不處於活動狀態的執行緒將由此返回 false 的方法反映出來。
true
;否則返回 false
。interrupted()
@Deprecated public void destroy()
suspend()
方式被死鎖。如果目標執行緒被破壞時保持一個保護關鍵系統資源的鎖,則任何執行緒在任何時候都無法再次存取該資源。如果另一個執行緒曾試圖鎖定該資源,則會出現死鎖。這類別死鎖通常會證明它們自己是「凍結」的進程。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。
NoSuchMethodError
。
NoSuchMethodError
- 始終public final boolean isAlive()
true
;否則返回 false
。@Deprecated public final void suspend()
resume
之前鎖定該監視器,則會發生死鎖。這類別死鎖通常會證明自己是「凍結」的進程。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。
首先,調用執行緒的 checkAccess
方法,且不帶任何參數。這可能拋出 SecurityException
(在當前執行緒中)。
如果執行緒處於活動狀態則被掛起,且不再有進一步的活動,除非重新開始。
SecurityException
- 如果當前執行緒不能修改該執行緒。checkAccess()
@Deprecated public final void resume()
suspend()
一起使用,但 suspend()
已經遭到反對,因為它具有死鎖傾向。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?。
首先,調用執行緒的 checkAccess
方法,且不帶任何參數。這可能拋出 SecurityException
(在當前執行緒中)。
如果執行緒處於活動狀態但被掛起,則它會在執行過程中重新開始並允許繼續活動。
SecurityException
- 如果當前執行緒不能修改該執行緒。checkAccess()
,
suspend()
public final void setPriority(int newPriority)
首先調用執行緒的 checkAccess
方法,且不帶任何參數。這可能拋出 SecurityException
。
在其他情況下,執行緒優先級被設定為指定的 newPriority
和該執行緒的執行緒組的最大允許優先級相比較小的一個。
newPriority
- 要為執行緒設定的優先級
IllegalArgumentException
- 如果優先級不在 MIN_PRIORITY
到 MAX_PRIORITY
範圍內。
SecurityException
- 如果當前執行緒無法修改該執行緒。getPriority()
,
checkAccess()
,
getThreadGroup()
,
MAX_PRIORITY
,
MIN_PRIORITY
,
ThreadGroup.getMaxPriority()
public final int getPriority()
setPriority(int)
public final void setName(String name)
name
相同。
首先調用執行緒的 checkAccess
方法,且不帶任何參數。這可能拋出 SecurityException
。
name
- 該執行緒的新名稱。
SecurityException
- 如果當前執行緒不能修改該執行緒。getName()
,
checkAccess()
public final String getName()
setName(String)
public final ThreadGroup getThreadGroup()
public static int activeCount()
public static int enumerate(Thread[] tarray)
enumerate
方法,且帶有陣列參數。
首先,如果有安全管理器,則 enumerate
方法調用安全管理器的 checkAccess
方法,並將執行緒組作為其參數。這可能導致拋出 SecurityException
。
tarray
- 要複製到的執行緒物件陣列
SecurityException
- 如果安全管理器存在,並且其 checkAccess
方法不允許該操作。ThreadGroup.enumerate(Thread[])
,
SecurityManager.checkAccess(ThreadGroup)
@Deprecated public int countStackFrames()
suspend()
,但它遭到了反對。此外,該調用的結果從來都不是意義明確的。
IllegalThreadStateException
- 如果該執行緒未掛起。public final void join(long millis) throws InterruptedException
millis
毫秒。逾時為 0
意味著要一直等下去。
millis
- 以毫秒為單位的等待時間。
InterruptedException
- 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。public final void join(long millis, int nanos) throws InterruptedException
millis
毫秒 + nanos
納秒。
millis
- 以毫秒為單位的等待時間。nanos
- 要等待的 0-999999 附加納秒。
IllegalArgumentException
- 如果 millis 值為負,則 nanos 的值不在 0-999999 範圍內。
InterruptedException
- 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。public final void join() throws InterruptedException
InterruptedException
- 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。public static void dumpStack()
Throwable.printStackTrace()
public final void setDaemon(boolean on)
該方法必須在啟動執行緒前調用。
該方法首先調用該執行緒的 checkAccess
方法,且不帶任何參數。這可能拋出 SecurityException
(在當前執行緒中)。
on
- 如果為 true
,則將該執行緒標記為守護執行緒。
IllegalThreadStateException
- 如果該執行緒處於活動狀態。
SecurityException
- 如果當前執行緒無法修改該執行緒。isDaemon()
,
checkAccess()
public final boolean isDaemon()
true
;否則返回 false
。setDaemon(boolean)
public final void checkAccess()
如果有安全管理器,則調用其 checkAccess
方法,並將該執行緒作為其參數。這可能導致拋出 SecurityException
。
SecurityException
- 如果不允許當前執行緒存取該執行緒。SecurityManager.checkAccess(Thread)
public String toString()
Object
中的 toString
public ClassLoader getContextClassLoader()
首先,如果有安全管理器,並且調用者的類別載入器不是 null,也不同於其上下文類別載入器正在被請求的執行緒上下文類別載入器的祖先,則通過 RuntimePermission("getClassLoader")
權限調用該安全管理器的 checkPermission
方法,查看是否可以獲取上下文 ClassLoader。
setContextClassLoader(java.lang.ClassLoader)
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public void setContextClassLoader(ClassLoader cl)
首先,如果有安全管理器,則通過 RuntimePermission("setContextClassLoader")
權限調用其 checkPermission
方法,查看是否可以設置上下文 ClassLoader。
cl
- 該執行緒的上下文 ClassLoader
SecurityException
- 如果當前執行緒無法設置上下文 ClassLoader。getContextClassLoader()
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public static boolean holdsLock(Object obj)
該方法旨在使程序能夠斷言當前執行緒已經保持一個指定的鎖:
assert Thread.holdsLock(obj);
obj
- 用於測試鎖所屬權的物件
NullPointerException
- 如果 obj 為 nullpublic StackTraceElement[] getStackTrace()
如果有安全管理器,並且該執行緒不是當前執行緒,則通過 RuntimePermission("getStackTrace") 權限調用安全管理器的 checkPermission 方法,查看是否可以獲取堆疊(stack)空間追蹤。
某些虛擬機器在某些情況下可能會從堆疊(stack)空間追蹤中省略一個或多個堆疊(stack)訊框。在極端情況下,沒有該執行緒堆疊(stack)空間追蹤資訊的虛擬機器可以從該方法返回一個零長度陣列。
SecurityException
- 如果安全管理器存在,並且其 checkPermission 方法不允許獲取執行緒的堆疊(stack)空間追蹤。SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
,
Throwable.getStackTrace()
public static Map<Thread,StackTraceElement[]> getAllStackTraces()
getStackTrace
方法指定的。
在調用該方法的同時,執行緒可能也在執行。每個執行緒的堆疊(stack)空間追蹤僅代表一個快照,並且每個堆疊(stack)空間追蹤都可以在不同時間獲得。如果虛擬機器沒有執行緒的堆疊(stack)空間追蹤資訊,則映射值中將返回一個零長度陣列。
如果有安全管理器,則通過 RuntimePermission("getStackTrace") 權限和 RuntimePermission("modifyThreadGroup") 權限調用其 checkPermission 方法,查看是否可以獲取所有執行緒的堆疊(stack)空間追蹤。
SecurityException
- 如果安全管理器存在,並且其 checkPermission 方法不允許獲取執行緒的堆疊(stack)空間追蹤。getStackTrace()
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
,
Throwable.getStackTrace()
public long getId()
public Thread.State getState()
public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
未捕獲到的異常處理首先由執行緒控制,然後由執行緒的 ThreadGroup
物件控制,最後由未捕獲到的預設異常處理程序控制。如果執行緒不設置明確的未捕獲到的異常處理程序,並且該執行緒的執行緒組(包括父執行緒組)未特別指定其 uncaughtException 方法,則將調用預設處理程序的 uncaughtException 方法。
通過設置未捕獲到的預設異常處理程序,應用程序可以為那些已經接受系統提供的任何「預設」行為的執行緒改變未捕獲到的異常處理方式(如記錄到某一特定設備或檔案)。
請注意,未捕獲到的預設異常處理程序通常不應順從該執行緒的 ThreadGroup 物件,因為這可能導致無限遞歸。
eh
- 用作未捕獲到的預設異常處理程序的物件。
如果為 null,則沒有預設處理程序。
SecurityException
- 如果安全管理器存在並拒絕 RuntimePermission
("setDefaultUncaughtExceptionHandler")setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
,
getUncaughtExceptionHandler()
,
ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)
public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
通過明確設置未捕獲到的異常處理程序,執行緒可以完全控制它對未捕獲到的異常作出回應的方式。 如果沒有設置這樣的處理程序,則該執行緒的 ThreadGroup 物件將充當其處理程序。
eh
- 用作該執行緒未捕獲到的異常處理程序的物件。如果為 null,則該執行緒沒有明確的處理程序。
SecurityException
- 如果當前執行緒無權修改該執行緒。setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)
,
ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。