[toc]
## Quartz定時任務觸發流程
從數據庫的角度看:

從代碼角度看:

## 核心線程
負責任務調度的幾個線程:
1.任務執行線程池:通常使用一個線程池(SimpleThreadPool)維護一組線程, 負責實際每個job的執行。
2. Scheduler調度線程`QuartzSchedulerThread` :輪詢存儲的所有trigger,如果有需要觸發的trigger,即到達了下一次觸發的時間,則從任務執行線程池獲取一個空閑線程,執行與該trigger關聯的任務。
3.處理misfire job的線程MisfireHandler:輪訓所有misfire的trigger,原理就是從數據庫中查詢所有下次觸發時間小于當前時間的trigger,按照每個trigger設定的misfire策略處理這些trigger。
### QuartzSchedulerThread源碼解讀
```
private QuartzScheduler qs;
private QuartzSchedulerResources qsRsrcs; --調度器資源,比如線程池
private final Object sigLock = new Object();
private boolean signaled;
private long signaledNextFireTime;
private boolean paused; --暫停狀態
private AtomicBoolean halted; --中止狀態
private Random random = new Random(System.currentTimeMillis());
```
QuartzScheduler Thread:用來進行任務調度的線程,在初始化的時候paused=true,halted=false,雖然線程開始運行了,但是paused=true,線程會一直等待, 直到start方法將paused置 為false。
## 參考資料
[quartz定時調度任務觸發流程](https://www.processon.com/view/617f66371efad41d03f7e3cf?fromnew=1)
- 寫在前面
- 如何閱讀源碼
- 第一部分 開源框架
- Netty
- 啟動過程
- SpringSecurityOauth2
- Quartz
- quartz啟動原理
- quartz定時調度任務觸發流程
- 第二部分 優質中間件源碼分析
- Canal
- Canal是如何偽裝為mysql的slave的?
- canal源碼調試
- Sentinel
- 核心概念梳理
- 滑動窗口實現原理
- jvm-sandbox
- jvm-sandbox-repeater
- Windows環境安裝
- 結果比對
- 第三部分 優質行業項目源碼分析
- 第一章 分庫分表實踐
- sharding-jdbc
- 第二章 DDD領域驅動
- 享同科技DDD開源框架
- J-IM
- 功能測試
- 悟空CRM
- 項目搭建
- 默認密碼
- dataX-web
- 項目搭建
- 部署報錯
- dolphinscheduler
- awescnb
- geek
- chrome插件-funds
- 優質開源項目備忘