ScheduledThreadPoolExecutor繼承自 ThreadPoolExecutor
ScheduledThreadPoolExecutor 內部構造了兩個內部類 ScheduledFutureTask 和 DelayedWorkQueue:
1. ScheduledFutureTask: 繼承了FutureTask,說明是一個異步運算任務;最上層分別實現了Runnable、Future、Delayed接口,說明它是一個可以延遲執行的異步運算任務。
2. DelayedWorkQueue: 這是 ScheduledThreadPoolExecutor 為存儲周期或延遲任務專門定義的一個延遲隊列,繼承了 AbstractQueue,為了契合 ThreadPoolExecutor 也實現了 BlockingQueue 接口。它內部只允許存儲 RunnableScheduledFuture 類型的任務。與 DelayQueue 的不同之處就是它只允許存放 RunnableScheduledFuture 對象,并且自己實現了二叉堆(DelayQueue 是利用了 PriorityQueue 的二叉堆結構)。