1. 程式人生 > >【JUC源碼解析】ScheduledThreadPoolExecutor

【JUC源碼解析】ScheduledThreadPoolExecutor

技術 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