上一篇中我們注重講了線程和任務的啓動,所以如何啓動線程和任務我們已經很清楚了,但是如何做到線程及任務安全的關閉及取消,也是有一定技巧的。
取消任務
大部分場景下,啓動的任務都會按照計劃正常的運行,然後結束。但是有些場景我們必須提前結束任務。比如
- 用戶發送了取消請求。
- 超過了某個規定的時間。
- 發生了某種錯誤。
- 應用程序被關閉。
Java
裏面取消任務的執行一般有兩種方法。
第一種方法,設置一個標誌位,任務執行過程會檢查該標誌位,如果爲true
則結束任務。該方法對於執行阻塞調用的情況下會有缺陷,下面會詳細說
第二種方法,通過中斷來安全的結束任務。
標誌位
假設有一個產生偶數的生成器,我們希望通過設置一個標誌位來結束該任務,否則這個任務會一直運行下去。
定義一個偶數生成任務,示例代碼如下
public class EvenGenerateTask implements Runnable{
private int count = 0