和Thread.sleep一樣, BlockingQueue的put和take方法會拋出編譯器異常 InterruptedException; __如果一個方法拋出InterruptedException, 說明這個方法是一個阻塞方法
Thread提供了interrupt(), interrupted(), isInterrupted()方法(還沒看)
每個線程都有一個bool類型的標志位用來表示線程的中斷狀態(tài), 當調(diào)用interrupt時會設置某個線程的這個標志位
中斷是一種協(xié)作機制, 對一個線程調(diào)用t1.interrupt()不會讓他t1停下來,僅僅是告訴t1應該處理
-
處理InterruptedException的方式
(1) 直接傳遞異常
不捕獲異常直接拋出 或捕獲異常做簡單清理再次拋出
(2) 恢復中斷
當代碼是Runnable的一部分時只能捕獲InterruptedException, 并通過調(diào)用當前線程的interrupt()方法恢復中斷狀態(tài)(否則中斷狀態(tài)會消失), 這樣更高層代碼將看到引發(fā)了一個中斷
示例
public class TaskRunnable implements Runnable { BlockingQueue<Task> queue; public void run() { try { processTask(queue.take()); } catch (InterruptedException e) { // restore interrupted status Thread.currentThread().interrupt(); } } void processTask(Task task) { // Handle the task } interface Task { } }
千萬不要只捕獲InterruptedException異常而不作任何處理!!!這樣線程被中斷的證據(jù)已經(jīng)被丟失更高層的代碼無法處理
1_基礎(chǔ)知識_chapter05_基礎(chǔ)構(gòu)建模塊_4_阻塞方法與中斷方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門收津,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浊伙,你說我怎么就攤上這事撞秋。” “怎么了吧黄?”我有些...
- 文/不壞的土叔 我叫張陵部服,是天一觀的道長。 經(jīng)常有香客問我拗慨,道長廓八,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任赵抢,我火速辦了婚禮剧蹂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烦却。我一直安慰自己宠叼,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冒冬,像睡著了一般伸蚯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上简烤,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榨馁!你這毒婦竟也來了憨栽?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布菌羽,位于F島的核電站,受9級特大地震影響由缆,放射性物質(zhì)發(fā)生泄漏注祖。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一均唉、第九天 我趴在偏房一處隱蔽的房頂上張望是晨。 院中可真熱鬧,春花似錦舔箭、人聲如沸罩缴。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽箫章。三九已至烙荷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炉抒,已是汗流浹背奢讨。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 一野瘦、wait--notify--sleep Object obj = new Object(); obj.wait...
- 單任務 單任務的特點是排隊執(zhí)行,也就是同步飒泻,就像再cmd輸入一條命令后鞭光,必須等待這條命令執(zhí)行完才可以執(zhí)行下一條命令...
- 這樣的情景您也許并不陌生:您在編寫一個測試程序史辙,程序需要暫停一段時間汹买,于是調(diào)用 Thread.sleep()。但是...
- 概要本章聊倔,會對線程的interrupt()中斷和終止方式進行介紹晦毙。涉及到的內(nèi)容包括: interrupt()說明 ...