【JUC源碼解析】ScheduledThreadPoolExecutor
阿新 • • 發佈:2018-05-20
技術 inf del timer 默認 執行 task 情況下 多線程
簡介
它是一個線程池執行器(ThreadPoolExecutor),在給定的延遲(delay)後執行。在多線程或者對靈活性有要求的環境下,要優於java.util.Timer。
提交的任務在執行之前支持取消,默認情況下,在延遲到來之前,不會自動從隊列中刪除,但可以設置,使其立刻從隊列中移除。
有兩種模式,固定頻率(scheduleAtFixedRate)和固定延遲(scheduleWithFixedDelay),不管哪種模式,同一個任務不會被疊加執行,即便是不同的線程執行同一個任務。
繼承ThreadPoolExecutor,維護一個固定大小的線程池和一個無界延遲隊列(delay queue)。
ScheduledFutureTask,用來描述要執行的任務,DelayedWorkQueue,則是裝在這些任務的delay queue.
固定頻率
一個任務,從第一次開始執行的時間點開始,每隔一定的時間執行一次,如果執行的時間大於間隔時間,則要等這次執行結束,再執行下一次。
如上圖所示,藍色表示任務執行,白色表示間隔時間。
固定延遲
一個任務,每一次執行結束之後,延遲一定的時間,執行下一次。
如上圖所示,藍色表示任務執行,白色表示間隔時間。
源碼分析
屬性
ScheduledFutureTask
屬性
構造方法
關鍵方法
構造方法
關鍵方法
DelayedWorkQueue
屬性
構造方法
關鍵方法
行文至此結束。
尊重他人的勞動,轉載請註明出處:http://www.cnblogs.com/aniao/p/aniao_stpe.html
【JUC源碼解析】ScheduledThreadPoolExecutor