多線程之線程中斷

多線程之Thread狀態(tài)中遍膜,我們提到碗硬,當(dāng)一個線程由于各種原因,如調(diào)用obj的wait方法而轉(zhuǎn)入WAITING狀態(tài)時瓢颅,依然能夠響應(yīng)中斷恩尾。

中斷示例

首先需要明確的是,中斷不是線程的一種狀態(tài)惜索。下面開始說明關(guān)于中斷的三個方法特笋。

多線程之Thread狀態(tài)中,我們提到調(diào)用notify或notifyAll能夠喚醒某個線程B巾兆,但是有這樣一種可能猎物,由于錯誤的編碼,或者其他什么原因角塑,其他線程都不會調(diào)用notify或notifyAll方法蔫磨,線程B永遠(yuǎn)不可能被喚醒。又或者基于某種原因圃伶,我們明確的表明堤如,不希望線程B處于WAITING狀態(tài)蒲列,并且跳過后續(xù)的代碼。

這樣一個顯而易見的需求就要求了搀罢,在某個線程A中蝗岖,例如主線程,Java應(yīng)該提供一種機(jī)制通知另一線程B榔至,使得線程B能夠跳出WAITING或者TIMED_WAITING狀態(tài)抵赢,這就是中斷。能夠達(dá)到上述目的的方法是Thread實例方法interrupt唧取。

中斷示例二

需要特別注意的是:線程t如非處于WAITING或TIMED_WAITING狀態(tài)铅鲤,t.interrupt方法不會起任何作用。但是枫弟,當(dāng)線程t隨后進(jìn)入WAITING或TIMED_WAITING狀態(tài)邢享,會立即拋出中斷異常。

中斷示例三

上述輸出中淡诗,t1會小于t2,這表明:當(dāng)主線程完成t.interrupt方法調(diào)用時袜漩,線程t還沒有進(jìn)入sychronized代碼塊,可以看到在這段時間內(nèi)奠货,線程t正常的運行座掘。但是當(dāng)線程t進(jìn)入sychronized代碼塊,并且調(diào)用o.wait方法后萍虽,主線程并沒有再次調(diào)用t.interrupt方法杉编,然而線程t依然立刻捕獲到了異常咆霜。

這表明主線程調(diào)用線程t的interrupt方法的時機(jī)是不受限制的,無需保證在線程t進(jìn)入WAITING或TIMED_WAITING狀態(tài)后調(diào)用光酣。


第二個方法依然是Thread實例的方法:isInterrupted

該方法返回Thread實例對象是否被設(shè)置了中斷

isInterruped方法的一個簡單示例

但是需要注意的是救军,如果線程t捕獲了中斷異常在前,調(diào)用isInterrupted方法在后唱遭,那么就會返回false。

isInterruped方法返回false

換言之庆揩,線程實例的isInterrupted方法返回true跌穗,當(dāng)且僅當(dāng)主線程調(diào)用了線程t的interrupt方法蚌吸,同時在isInterrupted方法之前羹唠,線程t尚未捕獲中斷異常娄昆。

一旦線程t捕獲了中斷異常,線程t的中斷標(biāo)識就會復(fù)位哺眯,置為false


最后一個方法是Thread的靜態(tài)方法:interrupted

這個方法返回調(diào)用該靜態(tài)方法的線程扒俯,它有沒有被設(shè)置中斷

靜態(tài)方法:interrupted

注意撼玄,和上面兩個實例不同。由于是在線程t中調(diào)用的靜態(tài)方法interrupted盏浙,因此它返回的是線程t是否被設(shè)置了中斷荔茬。

時間t1小于t2,這說明殖卑,主線程在調(diào)用了線程t的實例方法Interrupt方法坊萝,為線程t設(shè)置了中斷之后许起,程序再執(zhí)行到Thread.interrputed方法园细。

第一次調(diào)用返回Ture接校,這是意料之中的事。但是最后再一次調(diào)用鹿寻,返回了False诽凌。這說明,靜態(tài)方法interrupted方法會重置線程t的中斷痢法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末财搁,一起剝皮案震驚了整個濱河市躬络,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌越锈,老刑警劉巖膘滨,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件火邓,死亡現(xiàn)場離奇詭異,居然都是意外死亡躲胳,警方通過查閱死者的電腦和手機(jī)纤勒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門摇天,熙熙樓的掌柜王于貴愁眉苦臉地迎上來恐仑,“玉大人裳仆,你說我怎么就攤上這事孤钦。” “怎么了静袖?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵壳猜,是天一觀的道長。 經(jīng)常有香客問我,道長畅姊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任朱嘴,我火速辦了婚禮萍嬉,結(jié)果婚禮上隙疚,老公的妹妹穿的比我還像新娘。我一直安慰自己行冰,他們只是感情好伶丐,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布哗魂。 她就那樣靜靜地躺著,像睡著了一般朽色。 火紅的嫁衣襯著肌膚如雪故硅。 梳的紋絲不亂的頭發(fā)上吃衅,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天徘层,我揣著相機(jī)與錄音利职,去河邊找鬼。 笑死跷敬,一個胖子當(dāng)著我的面吹牛热押,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桶癣,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼牙寞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悔详?” 一聲冷哼從身側(cè)響起惹挟,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤匪煌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萎庭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡肴敛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年砸狞,在試婚紗的時候發(fā)現(xiàn)自己被綠了镀梭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡研底,死狀恐怖透罢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情乾胶,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布识窿,位于F島的核電站腕扶,受9級特大地震影響吨掌,放射性物質(zhì)發(fā)生泄漏脓恕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一秋茫、第九天 我趴在偏房一處隱蔽的房頂上張望肛著。 院中可真熱鬧,春花似錦枢贿、人聲如沸刀脏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至创夜,卻和暖如春仙逻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桨醋。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工喜最, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞬内。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓虫蝶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親能真。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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