JavaTM 2 Platform
Standard Ed. 6

java.lang
類別 Thread

java.lang.Object
  繼承者 java.lang.Thread
所有已實作的介面:
Runnable

public class Thread
extends Object
implements Runnable

執行緒 是程序中的執行執行緒。Java 虛擬機器允許應用程序共時地運行多個執行執行緒。

每個執行緒都有一個優先級,高優先級執行緒的執行優先於低優先級執行緒。每個執行緒都可以或不可以標記為一個守護程序。當某個執行緒中運行的程式碼創建一個新 Thread 物件時,該新執行緒的初始優先級被設定為創建執行緒的優先級,並且當且僅當創建執行緒是守護執行緒時,新執行緒才是守護程序。

當 Java 虛擬機器啟動時,通常都會有單個非守護執行緒(它通常會調用某個指定類別的 main 方法)。Java 虛擬機器會繼續執行執行緒,直到下列任一情況出現時為止:

創建新執行執行緒有兩種方法。一種方法是將類別宣告為 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();
 

每個執行緒都有一個標識名,多個執行緒可以同名。如果執行緒創建時沒有指定標識名,就會為其產生一個新名稱。

從以下版本開始:
JDK1.0
另請參見:
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
 

欄位詳細資訊

MIN_PRIORITY

public static final int MIN_PRIORITY
執行緒可以具有的最低優先級。

另請參見:
常數欄位值

NORM_PRIORITY

public static final int NORM_PRIORITY
分派給執行緒的預設優先級。

另請參見:
常數欄位值

MAX_PRIORITY

public static final int MAX_PRIORITY
執行緒可以具有的最高優先級。

另請參見:
常數欄位值
建構子詳細資訊

Thread

public Thread()
分派新的 Thread 物件。這種建構子與 Thread(null, null, gname) 具有相同的作用,其中 gname 是一個新產生的名稱。自動產生的名稱的形式為 "Thread-"+n,其中的 n 為整數。

另請參見:
Thread(ThreadGroup, Runnable, String)

Thread

public Thread(Runnable target)
分派新的 Thread 物件。這種建構子與 Thread(null, target,gname) 具有相同的作用,其中的 gname 是一個新產生的名稱。自動產生的名稱的形式為 「Thread-」+n,其中的 n 為整數。

參數:
target - 其 run 方法被調用的物件。
另請參見:
Thread(ThreadGroup, Runnable, String)

Thread

public Thread(ThreadGroup group,
              Runnable target)
分派新的 Thread 物件。這種建構子與 Thread(group, target, gname) 具有相同的作用,其中的 gname 是一個新產生的名稱。自動產生的名稱的形式為 "Thread-"+n ,其中的 n 為整數。

參數:
group - 執行緒組。
target - 其 run 方法被調用的物件。
拋出:
SecurityException - 如果當前執行緒無法在指定的執行緒組中創建執行緒。
另請參見:
Thread(ThreadGroup, Runnable, String)

Thread

public Thread(String name)
分派新的 Thread 物件。這種建構子與 Thread(null, null, name) 具有相同的作用。

參數:
name - 新執行緒的名稱。
另請參見:
Thread(ThreadGroup, Runnable, String)

Thread

public Thread(ThreadGroup group,
              String name)
分派新的 Thread 物件。這種建構子與 Thread(group, null, name) 具有相同的作用。

參數:
group - 執行緒組。
name - 新執行緒的名稱。
拋出:
SecurityException - 如果當前執行緒無法在指定的執行緒組中創建執行緒。
另請參見:
Thread(ThreadGroup, Runnable, String)

Thread

public Thread(Runnable target,
              String name)
分派新的 Thread 物件。這種建構子與 Thread(null, target, name) 具有相同的作用。

參數:
target - 其 run 方法被調用的物件。
name - 新執行緒的名稱。
另請參見:
Thread(ThreadGroup, Runnable, String)

Thread

public Thread(ThreadGroup group,
              Runnable target,
              String name)
分派新的 Thread 物件,以便將 target 作為其運行物件,將指定的 name 作為其名稱,並作為 group 所參考的執行緒組的一員。

如果 groupnull,並且有安全管理器,則該組由安全管理器的 getThreadGroup 方法確定。如果 groupnull,並且沒有安全管理器,或安全管理器的 getThreadGroup 方法返回 null,則該組與創建新執行緒的執行緒被設定為相同的 ThreadGroup。

如果有安全管理器,則其 checkAccess 方法通過 ThreadGroup 作為其參數被調用。

此外,當被覆寫 getContextClassLoadersetContextClassLoader 方法的子類別建構子直接或間接調用時,其 checkPermission 方法通過 RuntimePermission("enableContextClassLoaderOverride") 權限調用。其結果可能是 SecurityException。

如果 target 參數不是 null,則 targetrun 方法在啟動該執行緒時調用。如果 target 參數為 null,則該執行緒的 run 方法在該執行緒啟動時調用。

新創建執行緒的優先級被設定為創建該執行緒的執行緒的優先級,即當前正在運行的執行緒的優先級。方法 setPriority 可用於將優先級更改為一個新值。

當且僅當創建新執行緒的執行緒當前被標記為守護執行緒時,新創建的執行緒才被標記為守護執行緒。方法 setDaemon 可用於改變執行緒是否為守護執行緒。

參數:
group - 執行緒組。
target - 其 run 方法被調用的物件。
name - 新執行緒的名稱。
拋出:
SecurityException - 如果當前執行緒無法在指定的執行緒組中創建執行緒,或者無法覆寫上下文類別載入器方法。
另請參見:
Runnable.run(), run(), setDaemon(boolean), setPriority(int), ThreadGroup.checkAccess(), SecurityManager.checkAccess(java.lang.Thread)

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 - 如果當前執行緒無法在指定的執行緒組中創建執行緒。
從以下版本開始:
1.4
方法詳細資訊

currentThread

public static Thread currentThread()
返回對當前正在執行的執行緒物件的參考。

返回:
當前執行的執行緒。

yield

public static void yield()
暫停當前正在執行的執行緒物件,並執行其他執行緒。


sleep

public static void sleep(long millis)
                  throws InterruptedException
在指定的毫秒數內讓當前正在執行的執行緒休眠(暫停執行),此操作受到系統計時器和排程程序精度和準確性的影響。該執行緒不丟失任何監視器的所屬權。

參數:
millis - 以毫秒為單位的休眠時間。
拋出:
InterruptedException - 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。
另請參見:
Object.notify()

sleep

public static void sleep(long millis,
                         int nanos)
                  throws InterruptedException
在指定的毫秒數加指定的納秒數內讓當前正在執行的執行緒休眠(暫停執行),此操作受到系統計時器和排程程序精度和準確性的影響。該執行緒不丟失任何監視器的所屬權。

參數:
millis - 以毫秒為單位的休眠時間。
nanos - 要休眠的另外 0-999999 納秒。
拋出:
IllegalArgumentException - 如果 millis 值為負或 nanos 值不在 0-999999 範圍內。
InterruptedException - 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。
另請參見:
Object.notify()

start

public void start()
使該執行緒開始執行;Java 虛擬機器調用該執行緒的 run 方法。

結果是兩個執行緒共時地運行;當前執行緒(從調用返回給 start 方法)和另一個執行緒(執行其 run 方法)。

多次啟動一個執行緒是非法的。特別是當執行緒已經結束執行後,不能再重新啟動。

拋出:
IllegalThreadStateException - 如果執行緒已經啟動。
另請參見:
run(), stop()

run

public void run()
如果該執行緒是使用獨立的 Runnable 運行物件建構的,則調用該 Runnable 物件的 run 方法;否則,該方法不執行任何操作並返回。

Thread 的子類別應該覆寫該方法。

指定者:
介面 Runnable 中的 run
另請參見:
start(), stop(), Thread(ThreadGroup, Runnable, String)

stop

@Deprecated
public final void stop()
已過時。 該方法具有固有的不安全性。用 Thread.stop 來終止執行緒將釋放它已經鎖定的所有監視器(作為沿堆疊(stack)空間向上傳播的未檢查 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)

stop

@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)

interrupt

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 - 如果當前執行緒無法修改該執行緒

interrupted

public static boolean interrupted()
測試當前執行緒是否已經中斷。執行緒的中斷狀態 由該方法清除。換句話說,如果連續兩次調用該方法,則第二次調用將返回 false(在第一次調用已清除了其中斷狀態之後,且第二次調用檢驗完中斷狀態前,當前執行緒再次中斷的情況除外)。

執行緒中斷被忽略,因為在中斷時不處於活動狀態的執行緒將由此返回 false 的方法反映出來。

返回:
如果當前執行緒已經中斷,則返回 true;否則返回 false
另請參見:
isInterrupted()

isInterrupted

public boolean isInterrupted()
測試執行緒是否已經中斷。執行緒的中斷狀態 不受該方法的影響。

執行緒中斷被忽略,因為在中斷時不處於活動狀態的執行緒將由此返回 false 的方法反映出來。

返回:
如果該執行緒已經中斷,則返回 true;否則返回 false
另請參見:
interrupted()

destroy

@Deprecated
public void destroy()
已過時。 該方法最初用於破壞該執行緒,但不作任何清除。它所保持的任何監視器都會保持鎖定狀態。不過,該方法決不會被實作。即使要實作,它也極有可能以 suspend() 方式被死鎖。如果目標執行緒被破壞時保持一個保護關鍵系統資源的鎖,則任何執行緒在任何時候都無法再次存取該資源。如果另一個執行緒曾試圖鎖定該資源,則會出現死鎖。這類別死鎖通常會證明它們自己是「凍結」的進程。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?

拋出 NoSuchMethodError

拋出:
NoSuchMethodError - 始終

isAlive

public final boolean isAlive()
測試執行緒是否處於活動狀態。如果執行緒已經啟動且尚未終止,則為活動狀態。

返回:
如果該執行緒處於活動狀態,則返回 true;否則返回 false

suspend

@Deprecated
public final void suspend()
已過時。 該方法已經遭到反對,因為它具有固有的死鎖傾向。如果目標執行緒掛起時在保護關鍵系統資源的監視器上保持有鎖,則在目標執行緒重新開始以前任何執行緒都不能存取該資源。如果重新開始目標執行緒的執行緒想在調用 resume 之前鎖定該監視器,則會發生死鎖。這類別死鎖通常會證明自己是「凍結」的進程。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?

掛起執行緒。

首先,調用執行緒的 checkAccess 方法,且不帶任何參數。這可能拋出 SecurityException(在當前執行緒中)。

如果執行緒處於活動狀態則被掛起,且不再有進一步的活動,除非重新開始。

拋出:
SecurityException - 如果當前執行緒不能修改該執行緒。
另請參見:
checkAccess()

resume

@Deprecated
public final void resume()
已過時。 該方法只與 suspend() 一起使用,但 suspend() 已經遭到反對,因為它具有死鎖傾向。有關更多資訊,請參閱為何不贊成使用 Thread.stop、Thread.suspend 和 Thread.resume?

重新開始掛起的進程。

首先,調用執行緒的 checkAccess 方法,且不帶任何參數。這可能拋出 SecurityException(在當前執行緒中)。

如果執行緒處於活動狀態但被掛起,則它會在執行過程中重新開始並允許繼續活動。

拋出:
SecurityException - 如果當前執行緒不能修改該執行緒。
另請參見:
checkAccess(), suspend()

setPriority

public final void setPriority(int newPriority)
更改執行緒的優先級。

首先調用執行緒的 checkAccess 方法,且不帶任何參數。這可能拋出 SecurityException

在其他情況下,執行緒優先級被設定為指定的 newPriority 和該執行緒的執行緒組的最大允許優先級相比較小的一個。

參數:
newPriority - 要為執行緒設定的優先級
拋出:
IllegalArgumentException - 如果優先級不在 MIN_PRIORITYMAX_PRIORITY 範圍內。
SecurityException - 如果當前執行緒無法修改該執行緒。
另請參見:
getPriority(), checkAccess(), getThreadGroup(), MAX_PRIORITY, MIN_PRIORITY, ThreadGroup.getMaxPriority()

getPriority

public final int getPriority()
返回執行緒的優先級。

返回:
該執行緒的優先級。
另請參見:
setPriority(int)

setName

public final void setName(String name)
改變執行緒名稱,使之與參數 name 相同。

首先調用執行緒的 checkAccess 方法,且不帶任何參數。這可能拋出 SecurityException

參數:
name - 該執行緒的新名稱。
拋出:
SecurityException - 如果當前執行緒不能修改該執行緒。
另請參見:
getName(), checkAccess()

getName

public final String getName()
返回該執行緒的名稱。

返回:
該執行緒的名稱。
另請參見:
setName(String)

getThreadGroup

public final ThreadGroup getThreadGroup()
返回該執行緒所屬的執行緒組。 如果該執行緒已經終止(停止運行),該方法則返回 null。

返回:
該執行緒的執行緒組。

activeCount

public static int activeCount()
返回當前執行緒的執行緒組中活動執行緒的數目。

返回:
當前執行緒的執行緒組中活動執行緒的數目。

enumerate

public static int enumerate(Thread[] tarray)
將當前執行緒的執行緒組及其子組中的每一個活動執行緒複製到指定的陣列中。該方法只調用當前執行緒的執行緒組的 enumerate 方法,且帶有陣列參數。

首先,如果有安全管理器,則 enumerate 方法調用安全管理器的 checkAccess 方法,並將執行緒組作為其參數。這可能導致拋出 SecurityException

參數:
tarray - 要複製到的執行緒物件陣列
返回:
放入該陣列的執行緒數
拋出:
SecurityException - 如果安全管理器存在,並且其 checkAccess 方法不允許該操作。
另請參見:
ThreadGroup.enumerate(Thread[]), SecurityManager.checkAccess(ThreadGroup)

countStackFrames

@Deprecated
public int countStackFrames()
已過時。 該調用的定義依賴於 suspend(),但它遭到了反對。此外,該調用的結果從來都不是意義明確的。

計算該執行緒中的堆疊(stack)訊框數。執行緒必須掛起。

返回:
該執行緒中的堆疊(stack)訊框數。
拋出:
IllegalThreadStateException - 如果該執行緒未掛起。

join

public final void join(long millis)
                throws InterruptedException
等待該執行緒終止的時間最長為 millis 毫秒。逾時為 0 意味著要一直等下去。

參數:
millis - 以毫秒為單位的等待時間。
拋出:
InterruptedException - 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。

join

public final void join(long millis,
                       int nanos)
                throws InterruptedException
等待該執行緒終止的時間最長為 millis 毫秒 + nanos 納秒。

參數:
millis - 以毫秒為單位的等待時間。
nanos - 要等待的 0-999999 附加納秒。
拋出:
IllegalArgumentException - 如果 millis 值為負,則 nanos 的值不在 0-999999 範圍內。
InterruptedException - 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。

join

public final void join()
                throws InterruptedException
等待該執行緒終止。

拋出:
InterruptedException - 如果任何執行緒中斷了當前執行緒。當拋出該異常時,當前執行緒的中斷狀態 被清除。

dumpStack

public static void dumpStack()
將當前執行緒的堆疊(stack)空間追蹤列印至標準錯誤串流。該方法僅用於除錯。

另請參見:
Throwable.printStackTrace()

setDaemon

public final void setDaemon(boolean on)
將該執行緒標記為守護執行緒或使用者執行緒。當正在運行的執行緒都是守護執行緒時,Java 虛擬機器退出。

該方法必須在啟動執行緒前調用。

該方法首先調用該執行緒的 checkAccess 方法,且不帶任何參數。這可能拋出 SecurityException(在當前執行緒中)。

參數:
on - 如果為 true,則將該執行緒標記為守護執行緒。
拋出:
IllegalThreadStateException - 如果該執行緒處於活動狀態。
SecurityException - 如果當前執行緒無法修改該執行緒。
另請參見:
isDaemon(), checkAccess()

isDaemon

public final boolean isDaemon()
測試該執行緒是否為守護執行緒。

返回:
如果該執行緒是守護執行緒,則返回 true;否則返回 false
另請參見:
setDaemon(boolean)

checkAccess

public final void checkAccess()
判定當前運行的執行緒是否有權修改該執行緒。

如果有安全管理器,則調用其 checkAccess 方法,並將該執行緒作為其參數。這可能導致拋出 SecurityException

拋出:
SecurityException - 如果不允許當前執行緒存取該執行緒。
另請參見:
SecurityManager.checkAccess(Thread)

toString

public String toString()
返回該執行緒的字元串表示形式,包括執行緒名稱、優先級和執行緒組。

覆寫:
類別 Object 中的 toString
返回:
該執行緒的字元串表示形式。

getContextClassLoader

public ClassLoader getContextClassLoader()
返回該執行緒的上下文 ClassLoader。上下文 ClassLoader 由執行緒創建者提供,供運行於該執行緒中的程式碼在載入類別和資源時使用。如果未設定,則預設為父執行緒的 ClassLoader 上下文。原始執行緒的上下文 ClassLoader 通常設定為用於載入應用程序的類別載入器。

首先,如果有安全管理器,並且調用者的類別載入器不是 null,也不同於其上下文類別載入器正在被請求的執行緒上下文類別載入器的祖先,則通過 RuntimePermission("getClassLoader") 權限調用該安全管理器的 checkPermission 方法,查看是否可以獲取上下文 ClassLoader。

返回:
該執行緒的上下文 ClassLoader
從以下版本開始:
1.2
另請參見:
setContextClassLoader(java.lang.ClassLoader), SecurityManager.checkPermission(java.security.Permission), RuntimePermission

setContextClassLoader

public void setContextClassLoader(ClassLoader cl)
設置該執行緒的上下文 ClassLoader。上下文 ClassLoader 可以在創建執行緒設置,並允許創建者在載入類別和資源時向該執行緒中運行的程式碼提供適當的類別載入器。

首先,如果有安全管理器,則通過 RuntimePermission("setContextClassLoader") 權限調用其 checkPermission 方法,查看是否可以設置上下文 ClassLoader。

參數:
cl - 該執行緒的上下文 ClassLoader
拋出:
SecurityException - 如果當前執行緒無法設置上下文 ClassLoader。
從以下版本開始:
1.2
另請參見:
getContextClassLoader(), SecurityManager.checkPermission(java.security.Permission), RuntimePermission

holdsLock

public static boolean holdsLock(Object obj)
當且僅當當前執行緒在指定的物件上保持監視器鎖時,才返回 true

該方法旨在使程序能夠斷言當前執行緒已經保持一個指定的鎖:

     assert Thread.holdsLock(obj);
 

參數:
obj - 用於測試鎖所屬權的物件
返回:
如果當前執行緒在指定的物件上保持監視器鎖,則返回 true
拋出:
NullPointerException - 如果 obj 為 null
從以下版本開始:
1.4

getStackTrace

public StackTraceElement[] getStackTrace()
返回一個表示該執行緒堆疊(stack)空間轉儲的堆疊(stack)空間追蹤元素陣列。如果該執行緒尚未啟動或已經終止,則該方法將返回一個零長度陣列。如果返回的陣列不是零長度的,則其第一個元素代表堆疊(stack)空間頂,它是該序列中最新的方法調用。最後一個元素代表堆疊(stack)空間底,是該序列中最舊的方法調用。

如果有安全管理器,並且該執行緒不是當前執行緒,則通過 RuntimePermission("getStackTrace") 權限調用安全管理器的 checkPermission 方法,查看是否可以獲取堆疊(stack)空間追蹤。

某些虛擬機器在某些情況下可能會從堆疊(stack)空間追蹤中省略一個或多個堆疊(stack)訊框。在極端情況下,沒有該執行緒堆疊(stack)空間追蹤資訊的虛擬機器可以從該方法返回一個零長度陣列。

返回:
StackTraceElement 陣列,每個陣列代表一個堆疊(stack)訊框。
拋出:
SecurityException - 如果安全管理器存在,並且其 checkPermission 方法不允許獲取執行緒的堆疊(stack)空間追蹤。
從以下版本開始:
1.5
另請參見:
SecurityManager.checkPermission(java.security.Permission), RuntimePermission, Throwable.getStackTrace()

getAllStackTraces

public static Map<Thread,StackTraceElement[]> getAllStackTraces()
返回所有活動執行緒的堆疊(stack)空間追蹤的一個映射。映射鍵是執行緒,而每個映射值都是一個 StackTraceElement 陣列,該陣列表示相應 Thread 的堆疊(stack)空間轉儲。 返回的堆疊(stack)空間追蹤的格式都是針對 getStackTrace 方法指定的。

在調用該方法的同時,執行緒可能也在執行。每個執行緒的堆疊(stack)空間追蹤僅代表一個快照,並且每個堆疊(stack)空間追蹤都可以在不同時間獲得。如果虛擬機器沒有執行緒的堆疊(stack)空間追蹤資訊,則映射值中將返回一個零長度陣列。

如果有安全管理器,則通過 RuntimePermission("getStackTrace") 權限和 RuntimePermission("modifyThreadGroup") 權限調用其 checkPermission 方法,查看是否可以獲取所有執行緒的堆疊(stack)空間追蹤。

返回:
ThreadStackTraceElement 陣列的一個 Map,代表相應執行緒的堆疊(stack)空間追蹤。
拋出:
SecurityException - 如果安全管理器存在,並且其 checkPermission 方法不允許獲取執行緒的堆疊(stack)空間追蹤。
從以下版本開始:
1.5
另請參見:
getStackTrace(), SecurityManager.checkPermission(java.security.Permission), RuntimePermission, Throwable.getStackTrace()

getId

public long getId()
返回該執行緒的標識符。執行緒 ID 是一個正的 long 數,在創建該執行緒時產生。執行緒 ID 是唯一的,並終生不變。執行緒終止時,該執行緒 ID 可以被重新使用。

返回:
該執行緒的 ID。
從以下版本開始:
1.5

getState

public Thread.State getState()
返回該執行緒的狀態。 該方法用於監視系統狀態,不用於同步控制。

返回:
該執行緒的狀態。
從以下版本開始:
1.5

setDefaultUncaughtExceptionHandler

public static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設置當執行緒由於未捕獲到異常而突然終止,並且沒有為該執行緒定義其他處理程序時所調用的預設處理程序。

未捕獲到的異常處理首先由執行緒控制,然後由執行緒的 ThreadGroup 物件控制,最後由未捕獲到的預設異常處理程序控制。如果執行緒不設置明確的未捕獲到的異常處理程序,並且該執行緒的執行緒組(包括父執行緒組)未特別指定其 uncaughtException 方法,則將調用預設處理程序的 uncaughtException 方法。

通過設置未捕獲到的預設異常處理程序,應用程序可以為那些已經接受系統提供的任何「預設」行為的執行緒改變未捕獲到的異常處理方式(如記錄到某一特定設備或檔案)。

請注意,未捕獲到的預設異常處理程序通常不應順從該執行緒的 ThreadGroup 物件,因為這可能導致無限遞歸。

參數:
eh - 用作未捕獲到的預設異常處理程序的物件。 如果為 null,則沒有預設處理程序。
拋出:
SecurityException - 如果安全管理器存在並拒絕 RuntimePermission ("setDefaultUncaughtExceptionHandler")
從以下版本開始:
1.5
另請參見:
setUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler), getUncaughtExceptionHandler(), ThreadGroup.uncaughtException(java.lang.Thread, java.lang.Throwable)

getDefaultUncaughtExceptionHandler

public static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
返回執行緒由於未捕獲到異常而突然終止時調用的預設處理程序。如果返回值為 null,則沒有預設處理程序。

從以下版本開始:
1.5
另請參見:
setDefaultUncaughtExceptionHandler(java.lang.Thread.UncaughtExceptionHandler)

getUncaughtExceptionHandler

public Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
返回該執行緒由於未捕獲到異常而突然終止時調用的處理程序。如果該執行緒尚未明確設置未捕獲到的異常處理程序,則返回該執行緒的 ThreadGroup 物件,除非該執行緒已經終止,在這種情況下,將返回 null

從以下版本開始:
1.5

setUncaughtExceptionHandler

public void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設置該執行緒由於未捕獲到異常而突然終止時調用的處理程序。

通過明確設置未捕獲到的異常處理程序,執行緒可以完全控制它對未捕獲到的異常作出回應的方式。 如果沒有設置這樣的處理程序,則該執行緒的 ThreadGroup 物件將充當其處理程序。

參數:
eh - 用作該執行緒未捕獲到的異常處理程序的物件。如果為 null,則該執行緒沒有明確的處理程序。
拋出:
SecurityException - 如果當前執行緒無權修改該執行緒。
從以下版本開始:
1.5
另請參見:
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