Java的Interrupt與執行緒中斷

2021-09-12 18:23:52 字數 1099 閱讀 8014

每乙個執行緒都有乙個boolean屬性,表示中斷狀態,初始值為false。

正常情況下,只是將執行緒的中斷狀態變為true。執行緒中可以通過輪詢中斷狀態,做出相應的處理。

如果執行緒在阻塞狀態下,執行緒將退出阻塞且中斷狀態將被清除(即為false),且會丟擲interruptexception。

(io操作忽略)

(1)isinterrupted(),返回當前的中斷狀態,不會改變中斷狀態。

(2)static interrupted(),返回當前中斷狀態,且會清除中斷狀態。(即第二次呼叫將返回 false)

(1)繼續丟擲。

如果丟擲interruptedexception意味著是乙個阻塞方法,那麼呼叫乙個阻塞方法則意味著呼叫者也是乙個阻塞方法,應該有某種策略來處理interruptedexception。

(2)捕獲interruptedexception,執行清理,再重新丟擲interruptedexception。

(3)再次呼叫interrupt()。

當由runnable定義的任務呼叫乙個可中斷的方法時,在這種情況下,不能重新丟擲interruptedexception,因為runnable介面的run方法不允許丟擲異常。

當乙個阻塞方法檢測到中斷並丟擲interruptedexception但是不能重新丟擲它,那麼應該保留中斷發生的證據,以便呼叫棧中更高層的**能知道中斷,並對中斷做出響應,該任務可以通過呼叫interrupt()以重新中斷當前執行緒來完成。

public void run() 

}catch (interruptedexception e)

}

如乙個io類會阻塞執行緒,但不支援中斷。則可以寫乙個新io類,繼承thread類,重寫interrupt方法,在interrupt中關閉io,最後呼叫super.interrupt();

在進入阻塞前被中斷,被稱為待決中斷。

在呼叫阻塞方法時,會立刻丟擲interruptexception。

參考文章:多執行緒-interrupt(),isinterrupted(),interrupted() - 小路不懂2

Java的Interrupt與執行緒中斷

每乙個執行緒都有乙個boolean屬性,表示中斷狀態,初始值為false。正常情況下,只是將執行緒的中斷狀態變為true。執行緒中可以通過輪詢中斷狀態,做出相應的處理。如果執行緒在阻塞狀態下,執行緒將退出阻塞且中斷狀態將被清除 即為false 且會丟擲interruptexception。io操作忽...

JAVA執行緒的interrupt

interrupt 只是改變中斷狀態而已.interrupt 不會中斷乙個正在執行的執行緒。這一方法實際上完成的是,給受阻塞的執行緒丟擲乙個中斷訊號,這樣受阻執行緒就得以退出阻塞的狀態 更確切 的說,如果執行緒被 object.wait,thread.join 和thread.sleep 三種方法之...

JAVA執行緒的interrupt

interrupt 只是改變中斷狀態而已.interrupt 不會中斷乙個正在執行的執行緒。這一方法實際上完成的是,給受阻塞的執行緒丟擲乙個中斷訊號,這樣受阻執行緒就得以退出阻塞的狀態 更確切 的說,如果執行緒被 object.wait,thread.join 和thread.sleep 三種方法之...