java多執行緒學習筆記(2) 中斷執行緒

2021-07-04 02:06:45 字數 2017 閱讀 5644

當對乙個執行緒呼叫執行緒終止方法時,執行緒的中斷狀態將被置位。這是每乙個執行緒都具有的boolean標誌。每個執行緒都應該時不時地檢查這個標誌,以判斷執行緒是否被中斷。

要想弄清中斷狀態是否被置位,首先呼叫靜態的thread.currentthread方法獲得當前執行緒,然後呼叫isinterrupted method方法:

while(!thread.currentthread().isinterrupted() )

但是,如果執行緒被阻塞,就無法檢測中斷狀態。這是產生interruptedexception異常的地方。當在乙個被阻塞的執行緒(呼叫sleep或wait)上呼叫interrupt方法時,阻塞呼叫將會被interrupted exception異常中斷。

乙個執行緒被中斷不意味著它一定要被終止。中斷乙個執行緒不過是引起他的注意。被中斷的執行緒可以決定如何響應中斷。某些執行緒是如此重要以至於應該處理完異常後,繼續執行,而不理會中斷。但是,更普遍的情況是,執行緒將簡單地中斷作為乙個終止得請求。

interrupt方法 和 isinterrupted。isinterrupted方法是乙個靜態方法,它檢測當前的執行緒是否被中斷。而且,呼叫interrupted方法會清除該執行緒的中斷狀態。另一方面,isinterrupted方法是乙個例項方法,可用來檢測是否有執行緒被中斷。呼叫這個方法不會改變中斷狀態。

interrupt api

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

參考:

多執行緒學習(一) 中斷執行緒

執行緒的中斷 第一種方法 stop方法 不正確的終止方法,已經被jdk棄用,原因是可能會出現執行緒安全問題。示例 public class stopthread extends thread catch exception e j public void print public static vo...

多執行緒 執行緒中中斷執行緒的方法

public class threaddemo13 catch interruptedexception e system.out.println 交易終止 t1.start thread.sleep 2000 system.out.println 有內鬼終止交易 flag true public ...

Java併發(3) 中斷執行緒

2011 03 21 mon comments 在了解如何中斷執行緒之前,先應該弄清楚執行緒的幾種狀態 新建狀態 new 乙個新的執行緒在被建立之後,在執行 或阻塞 之前的狀態。就緒狀態 runnable 當乙個執行緒只要擁有cpu時間片就能執行的時候,這個執行緒就處於就緒狀態。阻塞狀態 block...