ScheduledThreadPoolExecutor繼承自 ThreadPoolExecutor,為任務提供延遲或周期執行,屬于線程池的一種。和 ThreadPoolExecutor 相比,它還具有以下幾種特性:
1. 使用專門的任務類型—ScheduledFutureTask 來執行周期任務,也可以接收不需要時間調度的任務(這些任務通過 ExecutorService 來執行)。
2. 使用專門的存儲隊列—DelayedWorkQueue 來存儲任務,DelayedWorkQueue 是無界延遲隊列DelayQueue 的一種。相比ThreadPoolExecutor也簡化了執行機制(delayedExecute方法,后面單獨分析)。
3. 支持可選的run-after-shutdown參數,在池被關閉(shutdown)之后支持可選的邏輯來決定是否繼續運行周期或延遲任務。并且當任務(重新)提交操作與 shutdown 操作重疊時,復查邏輯也不相同。