Quartz原理

weixin_34041003發表於2018-03-01

一、核心概念

Quartz的原理不是很複雜,只要搞明白幾個概念,然後知道如何去啟動和關閉一個排程程式即可。

1、Job
表示一個工作,要執行的具體內容。此介面中只有一個方法execute。我們的任務類實現該介面,重寫execute方法即是要進行任務排程的方法。
void execute(JobExecutionContext context)

2、JobDetail
JobDetail表示一個具體的可執行的排程程式,Job是這個可執行程排程程式所要執行的內容,另外JobDetail還包含了這個任務排程的方案和策略。

3、Trigger代表一個排程引數的配置,什麼時候去調。

4、Scheduler代表一個排程容器,一個排程容器中可以註冊多個JobDetail和Trigger。當Trigger與JobDetail組合,就可以被Scheduler容器排程了。正常情況下一個應用只需要一個Scheduler物件。

二、結構

1、scheduler是一個計劃排程器容器,容器裡面可以盛放眾多的JobDetail和trigger,當容器啟動後,裡面的每個JobDetail都會根據trigger按部就班自動去執行。

2、scheduler是個容器,容器中有一個執行緒池,用來並行排程執行每個作業。

所有工作執行緒都會放線上程池中,即所有工作執行緒都放在SimpleThreadPool例項的一個LinkedList<WorkerThread>成員變數中。WorkerThread是SimpleThreadPool的內部類,這麼設計可能是因為不想繼承SimpleThreadPool但又想呼叫其protected方法,或者想隱藏WorkerThread。執行緒池還擁有兩個LinkedList<WorkerThread>:availWorkers和busyWorkers,分別存放空閒和正在執行job的工作執行緒。

排程器執行緒以{instanceName}_QuartzSchedulerThread命名。該執行緒將根據trigger找出要待執行job,然後從threadpool中拿出工作執行緒來執行。排程器執行緒主體是QuartzSchedulerThread物件。

具體呼叫鏈是從StdScheduler -> QuartzScheduler -> QuartzSchedulerResources -> SimpleThreadPool(配置檔案指定) -> WorkerThread

8100269-bcd0438a01b919e4.png
image.png

3、將上述的結構用一個圖來表示

8100269-bb7bb7d02e06cab5.png
image.png

https://www.jianshu.com/p/bab8e4e32952

相關文章