Java基礎(chǔ)-線程中斷

線程中斷

@see http://www.infoq.com/cn/articles/java-interrupt-mechanism

@see https://www.ibm.com/developerworks/cn/java/j-jtp05236.html

每個(gè)線程都有一個(gè)與之相關(guān)聯(lián)的 Boolean 屬性,用于表示線程的中斷狀態(tài)(interrupted status)金抡。中斷狀態(tài)初始時(shí)為 false;當(dāng)另一個(gè)線程通過(guò)調(diào)用 Thread.interrupt() 中斷一個(gè)線程時(shí)宇葱,會(huì)出現(xiàn)以下兩種情況之一:

1操漠、如果那個(gè)線程在執(zhí)行一個(gè)低級(jí)可中斷阻塞方法澄峰,例如 Thread.sleep()朱巨、 Thread.join() 或 Object.wait()他嫡,那么它將取消阻塞并拋出 InterruptedException

2秧耗、否則备籽, interrupt() 只是設(shè)置線程的中斷狀態(tài)。 在被中斷線程中運(yùn)行的代碼以后可以輪詢中斷狀態(tài)分井,看看它是否被請(qǐng)求停止正在做的事情车猬。

Java中斷機(jī)制是一種協(xié)作機(jī)制,也就是說(shuō)通過(guò)中斷并不能直接終止另一個(gè)線程尺锚,而需要被中斷的線程自己處理中斷珠闰。

中斷狀態(tài)可以通過(guò) Thread.isInterrupted() 來(lái)讀取,并且可以通過(guò)一個(gè)名為 Thread.interrupted() 的操作讀取和清除瘫辩。

interrupted

public static boolean interrupted() {

? ? return currentThread().isInterrupted(true);

}

測(cè)試當(dāng)前線程是否已經(jīng)中斷伏嗜,線程的中斷狀態(tài) 由該方法清除。

換句話說(shuō)杭朱,如果連續(xù)兩次調(diào)用該方法阅仔,則第二次調(diào)用將返回 false(在第一次調(diào)用已清除了其中斷狀態(tài)之后,且第二次調(diào)用檢驗(yàn)完中斷狀態(tài)前弧械,當(dāng)前線程再次中斷的情況除外)八酒。

isInterrupted

public boolean isInterrupted() {

? ? return isInterrupted(false);

}

測(cè)試線程是否已經(jīng)中斷。線程的中斷狀態(tài)不受該方法的影響刃唐。

/**

* Tests if some Thread has been interrupted.? The interrupted state

* is reset or not based on the value of ClearInterrupted that is

* passed.

*/

private native boolean isInterrupted(boolean ClearInterrupted);

interrupt

public void interrupt() {

? ? if (this != Thread.currentThread())

? ? ? ? checkAccess();

? ? .

? ? interrupt0();? ? ? ? ? // Just to set the interrupt flag

? ? ...

中斷線程羞迷。僅僅是設(shè)置一個(gè)中斷標(biāo)志位。

處理中斷

一般說(shuō)來(lái)画饥,當(dāng)可能阻塞的方法聲明中有拋出InterruptedException則暗示該方法是可中斷的衔瓮,如BlockingQueue#put、BlockingQueue#take抖甘、Object#wait热鞍、Thread#sleep等,

如果程序捕獲到這些可中斷的阻塞方法拋出的InterruptedException或檢測(cè)到中斷后衔彻,這些中斷信息該如何處理薇宠?一般有以下兩個(gè)通用原則:

1、如果遇到的是可中斷的阻塞方法拋出InterruptedException艰额,可以繼續(xù)向方法調(diào)用棧的上層拋出該異常澄港,如果是檢測(cè)到中斷,則可清除中斷狀態(tài)并拋出InterruptedException柄沮,使當(dāng)前方法也成為一個(gè)可中斷的方法回梧。

2废岂、若有時(shí)候不太方便在方法上拋出InterruptedException,比如要實(shí)現(xiàn)的某個(gè)接口中的方法簽名上沒有throws InterruptedException(如Runnable run 方法)狱意,這時(shí)就可以捕獲可中斷方法的InterruptedException湖苞,

? 并通過(guò)Thread.currentThread.interrupt()來(lái)重新設(shè)置中斷狀態(tài)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末髓涯,一起剝皮案震驚了整個(gè)濱河市袒啼,隨后出現(xiàn)的幾起案子哈扮,更是在濱河造成了極大的恐慌纬纪,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滑肉,死亡現(xiàn)場(chǎng)離奇詭異包各,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)靶庙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門问畅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人六荒,你說(shuō)我怎么就攤上這事护姆。” “怎么了掏击?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵卵皂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我砚亭,道長(zhǎng)灯变,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任捅膘,我火速辦了婚禮添祸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寻仗。我一直安慰自己刃泌,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布署尤。 她就那樣靜靜地躺著耙替,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沐寺。 梳的紋絲不亂的頭發(fā)上林艘,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天,我揣著相機(jī)與錄音混坞,去河邊找鬼狐援。 笑死钢坦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的啥酱。 我是一名探鬼主播爹凹,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼镶殷!你這毒婦竟也來(lái)了禾酱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绘趋,失蹤者是張志新(化名)和其女友劉穎颤陶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陷遮,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滓走,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了帽馋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搅方。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖绽族,靈堂內(nèi)的尸體忽然破棺而出姨涡,到底是詐尸還是另有隱情,我是刑警寧澤吧慢,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布涛漂,位于F島的核電站,受9級(jí)特大地震影響娄蔼,放射性物質(zhì)發(fā)生泄漏怖喻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一岁诉、第九天 我趴在偏房一處隱蔽的房頂上張望锚沸。 院中可真熱鬧,春花似錦涕癣、人聲如沸哗蜈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)距潘。三九已至,卻和暖如春只搁,著一層夾襖步出監(jiān)牢的瞬間音比,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工氢惋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洞翩,地道東北人稽犁。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像骚亿,于是被迫代替她去往敵國(guó)和親已亥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容