java併發(一)線程中斷 interrupt()

首先我們要明白線程中斷並不能終止該線程的執行,被中斷的線程根據自己的中斷狀態自己處理。

舉個例子。

你正在學習,媽媽大聲跟你說來吃飯了(此時就調用了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使用的。不懂再看看上面的源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章