軟件版本:quartz-2.2.3oop
上一篇介紹了quartz的啓動過程,這篇主要介紹quartz的執線程模型,衆所周知,quartz並無採用定時器去完成定時任務,而是經過線程去完成。爲了簡化對quartz線程模型的理解,就暫用下理解方式吧源碼分析
| 類名 | 名詞解釋 |
|-
| SimpleThreadPool| 工頭兒 |
| WorkThread| 工人 |
| QuartzScheduleThread| 老闆 |
| JobRunShell | 工做,實現了Runnable|線程
從上述配置文件能夠看出quartz配置了一個線程池,實現名稱爲SimpleThreadPool, 這個線程池做用是什麼呢,我把註釋寫在代碼中。code
以上是這個類的成員變量,從上面的成員變量能夠看出,這個線程池用LinkedList存儲執行全部job的工人(Worker),來管理了全部的工人(Worker),那麼咱們就叫SimpleThreadPool爲工頭兒吧,老闆要分派任務,確定會找工頭兒,工頭在找空閒的工人來處理工做。
那工頭對老闆提供的接口是什麼呢,繼續往下看blog
上面的runInThread 就是工頭對老闆提供的對外接口,Runnable就是老闆安排的工做,流程是這樣的:接口
介紹了工頭,再來介紹一下工人,工頭兒經過調用work.run方法,工人就開始工做了
開一下代碼
文檔
工頭把任務交給工人,工人線程此時阻塞,當runnable被賦值時,工做線程被喚醒。流程圖以下:
get
QuartzSchedulerThread是quartz裏真正負責時間調度的類,這個線程的run方法也是最外層的loop。主要負責任務觸發,工做包裝,任務批處理的控制,這個方法是本章最難的一個方法了,看一下主loop
boss線程涉及的細節很是多,看一下流程圖
源碼
上面的流程介紹的差很少了,建議對着代碼看流程,有助於理解。it
一圖以概之
以上是本身的一家之言,如有錯誤之處,請不吝賜教,共同提升。