EP36-線程中斷

1.如何中斷欺冀,什么時候中斷

Thread的中斷(interrupt)不是直接打斷一個線程的執(zhí)行锦溪,而是給這個線程加上一個中斷的「標記」。比如一個線程的run方法里面阿迈,不停的打印這個線程被執(zhí)行了多少次:

//thread的run方法里的內(nèi)容:
while(true) {
// 死循環(huán)毡代,等待被中斷   
   System.out.println(getName() + getId() + "執(zhí)行了" + ++i + "次");
}

要實現(xiàn)的效果是一秒后這個線程中斷笤喳,不再打庸技恕:

//Interrupt test:
        MyThread t = new MyThread("MyThread");  
        t.start();  
        Thread.sleep(1000);// 睡眠1000毫秒枯途,這時候t告訴CPU不需要分配資源給它了,那么其他線程就搶占了CPU資源籍滴,這樣這個線程里的其他動作就延緩執(zhí)行了
        t.interrupt();// 中斷t線程 

注意到上面的while(true)酪夷,也就是說在t被中斷前它會一直打印的。上面的這個例子執(zhí)行起來會發(fā)現(xiàn)短短一瞬間打印了幾百萬次:

MyThread10執(zhí)行了1520689次
MyThread10執(zhí)行了1520690次
MyThread10執(zhí)行了1520691次
...

但是1秒鐘過去了异逐,還是在打印捶索。這是因為Thread.interrupt()只是在「禮貌地請求」中斷,不是立刻執(zhí)行中斷灰瞻。中斷是一種協(xié)作機制腥例。當(dāng)一個線程中斷另一個線程時,被中斷的線程不一定要立即停止正在做的事情酝润。
怎么處理中斷請求呢燎竖,可以通過輪詢Thread.isInterrupted() 來讀取。當(dāng)然也可以不理會中斷請求要销。比如我們用Windows的時候應(yīng)用程序卡了构回,我們點了右上角的紅叉但程序還是不會立刻關(guān)掉,這就是在發(fā)送中斷請求疏咐,但是一直沒人處理纤掸。然后我們就打開任務(wù)管理器強制關(guān)閉這個應(yīng)用程序了。

//把上面的while(true)改成下面這樣輪詢是否中斷浑塞,就會在一秒后停止打印了
while(!isInterrupted()){...}

2.中斷阻塞方法

對于interrupt()借跪,今天白天在郵件里答復(fù)錯了。酌壕。當(dāng)時回答說wait()接收到interrupt請求也需要等待輪詢isInterrupted()來檢查是否需要從阻塞狀態(tài)恢復(fù)掏愁,這是不對的,真正的情況是會立刻取消阻塞并拋出異常卵牍。

當(dāng)另一個線程通過調(diào)用 Thread.interrupt() 中斷一個線程時會發(fā)生兩種情況

  • 如果那個線程在執(zhí)行一個低級可中斷阻塞方法果港,例如 Thread.sleep()、 Thread.join() 或 Object.wait()糊昙,那么它將取消阻塞并拋出 InterruptedException辛掠。
  • 否則, interrupt() 只是設(shè)置線程的中斷狀態(tài)释牺。 在被中斷線程中運行的代碼以后可以輪詢中斷狀態(tài)萝衩,看看它是否被請求停止正在做的事情。

INTERRUPTED
Thread.interrupted()會清除中斷狀態(tài)(interrupted status)船侧。如果當(dāng)前線程已經(jīng)被中斷了就返回true欠气,否則返回false。換句話說镜撩,如果這個方法連續(xù)執(zhí)行了兩次预柒,第二次就會返回false(除非執(zhí)行第二次之前又中斷了)。

REFERENCE:
[1]http://www.ibm.com/developerworks/cn/java/j-jtp05236.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末袁梗,一起剝皮案震驚了整個濱河市宜鸯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌遮怜,老刑警劉巖淋袖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锯梁,居然都是意外死亡即碗,警方通過查閱死者的電腦和手機焰情,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剥懒,“玉大人内舟,你說我怎么就攤上這事〕蹰伲” “怎么了验游?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長保檐。 經(jīng)常有香客問我耕蝉,道長,這世上最難降的妖魔是什么夜只? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任垒在,我火速辦了婚禮,結(jié)果婚禮上盐肃,老公的妹妹穿的比我還像新娘爪膊。我一直安慰自己,他們只是感情好砸王,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布推盛。 她就那樣靜靜地躺著,像睡著了一般谦铃。 火紅的嫁衣襯著肌膚如雪耘成。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天驹闰,我揣著相機與錄音瘪菌,去河邊找鬼。 笑死嘹朗,一個胖子當(dāng)著我的面吹牛师妙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屹培,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼默穴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了褪秀?” 一聲冷哼從身側(cè)響起蓄诽,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎媒吗,沒想到半個月后仑氛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年锯岖,在試婚紗的時候發(fā)現(xiàn)自己被綠了介袜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嚎莉,死狀恐怖米酬,靈堂內(nèi)的尸體忽然破棺而出沛豌,到底是詐尸還是另有隱情趋箩,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布加派,位于F島的核電站叫确,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏芍锦。R本人自食惡果不足惜竹勉,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望娄琉。 院中可真熱鬧次乓,春花似錦、人聲如沸孽水。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽女气。三九已至杏慰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炼鞠,已是汗流浹背缘滥。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谒主,地道東北人朝扼。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像霎肯,于是被迫代替她去往敵國和親擎颖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

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