8 執行緒的中斷機制

2021-08-13 21:37:28 字數 1115 閱讀 1661

執行緒的thread.interrupt()方法是中斷執行緒,將會設定該執行緒的中斷狀態位,即設定為true,中斷的結果執行緒是死亡、還是等待新的任務或是繼續執行至下一步,就取決於這個程式本身。執行緒會不時地檢測這個中斷標示位,以判斷執行緒是否應該被中斷(中斷標示值是否為true)。

判斷某個執行緒是否已被傳送過中斷請求,請使用thread.currentthread().isinterrupted()方法(因為它將執行緒中斷標示位設定為true後,不會立刻清除中斷標示位,即不會將中斷標設定為false),而不要使用thread.interrupted()(該方法呼叫後會將中斷標示位清除,即重新設定為false)方法來判斷。

則會在這些阻塞方法呼叫處丟擲interruptedexception異常,並且在丟擲異常後立即將執行緒的中斷標示位清除,即重新設定為false。丟擲異常是為了執行緒從阻塞狀態醒過來,並在結束執行緒前讓程式設計師有足夠的時間來處理中斷請求。

synchronized在獲鎖的過程中是不能被中斷的,意思是說如果產生了死鎖,則不可能被中斷。與synchronized功能相似的reentrantlock.lock()方法也是一樣,它也不可中斷的,即如果發生死鎖,那麼reentrantlock.lock()方法無法終止,如果呼叫時被阻塞,則它一直阻塞到它獲取到鎖為止。

沒有任何語言方面的需求乙個被中斷的執行緒應該終止。中斷乙個執行緒只是為了引起該執行緒的注意,被中斷執行緒可以決定如何應對中斷。某些執行緒非常重要,以至於它們應該不理會中斷,而是在處理完丟擲的異常之後繼續執行,但是更普遍的情況是,乙個執行緒將把中斷看作乙個終止請求,這種執行緒的run方法遵循如下形式:

try 

} catch (interruptedexception e) finally

}

上面是while迴圈在try塊裡,如果try在while迴圈裡時,因該在catch塊裡重新設定一下中斷標示,因為丟擲interruptedexception異常後,中斷標示位會自動清除,此時應該這樣:

public

void

run() catch (interruptedexception e)

}}

Linux驅動開發 8 中斷分層機制 軟中斷

1 概念 軟中斷是模擬硬體中斷的概念,實現巨集觀上的非同步執行效果。其實tasklet 也是基於軟中斷實現的。2 軟中斷和硬中斷的區別 a 硬中斷是外部裝置對cpu 的中斷,軟中斷時程式對核心的中斷 b 訊號是由核心 或者其他程序 對某個程序的軟中斷 3 結構表示 struct softirq ac...

Linux中斷機制

中斷 interrupt 被定義為乙個事件,該事件改變處理器執行的指令順序,這樣的事件與cpu晶元內外部硬體電路產生的電訊號相對應。中斷通常分為同步 synchronous 中斷和非同步 asynchronous 中斷。同步中斷指的是當指令執行時由cpu控制單元產生的,之所以稱為同步,是因為只有在一...

8 C 的多執行緒機制探索

五 互斥物件 更加靈活的同步方式 有時候你會覺得上面介紹的方法好像不夠用,對,我們解決了 和資源的同步問題,解決了多執行緒自動化管理和定時觸發的問題,但是如何控制多個執行緒相互之間的聯絡呢?例如我要到餐廳吃飯,在吃飯之前我先得等待廚師把飯菜做好,之後我開始吃飯,吃完我還得付款,付款方式可以是現金,也...