好吧,讓我們說我有一個執行while()循環的線程。在循環期間,可以做一些事情,然後回去睡覺:「乾淨」的方式來中斷一個可能做某事的線程
public void run() {
while (some_condition) {
doSomeLongJob(); // this could be a long job
try {
Thread.sleep(a_bit); // back to sleep
} catch (InterruptedException ie) {
handleInterruptionButDoNotExitLoop();
}
}
}
一些問題:
- 如果doSomeLongJob的執行過程中的一些中斷到來時,該方法將繼續其自然結束? (我想是的,只要沒有人檢查Thread.interrupted()但我想確認);
- 捕捉中斷後,將中斷()狀態重置爲false?
- 總之,只要線程狀態被重置,線程可以被中斷n時間?有沒有辦法重置手動線程狀態以處理在執行doSomeLongJob期間的中斷?
是的,我的意思是當InterruptedException發生時...但是讓我們說,例如,我將doSomeLongJob移動到try/catch塊中。如果發生InterruptedException,執行什麼? (即有人調用Thread.interrupt())。有沒有一種方法可以回滾doSomeLongJob中已完成的工作? – Ema 2013-04-05 11:38:45
引發InterruptedException的方法應將中斷標誌重置爲false。 Thread.sleep()會做到這一點。 – 2013-04-05 20:44:27
@Ema鑑於該方法處於執行過程中,我想說你必須自己做回滾,但如果中斷源自方法外部,這將會非常棘手。 – 2013-04-08 11:15:44