首先我們要明白線程中斷並不能終止該線程的執行,被中斷的線程根據自己的中斷狀態自己處理。
舉個例子。
你正在學習,媽媽大聲跟你說來吃飯了(此時就調用了interrupt())方法。這時候你知道了,哦,可以吃飯了。但是我還是想寫完這道題目再去吃飯。當你寫完這道題目。調用 isInterrupted()方法 後,返回true。 原來有人告訴我已經可以吃飯了。好的。停止學習(中斷線程)去吃飯。
好了,通過上面的例子我們知道。
interrupt(),只是用來設置線程的中斷標誌爲true。這僅僅是設置中斷而已,線程實際並沒有中斷。注意,當線程被join,sleep方法被阻塞而掛起,這時候用interrupt會拋出錯誤而返回。注意啊,最後還是會返回的。
isInterrupted()僅僅是檢測當前線程是否被中斷。
怎麼來用呢?
while(!Thread.currentThread().isinterrupt()){
//做這道題目
}
一般就是來用作判斷條件
interrupted() 使用要特別注意。他和isInterrupted()一樣,也會返回中斷狀態。 但是,如果當前的線程被中斷,就會清除中斷標誌。
來看下源碼
public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
注意,這是返回的是currentThread()
舉個例子,
比如你在thread1線程中用thread1.interrupted() 和用thread2.interrupted() 是一樣的。都是 對thread1使用的。不懂再看看上面的源碼。