quartz源碼分析——執行引擎和線程模型


title: quartz源碼分析——執行引擎和線程模型
date: 2017-09-09 23:14:48
categories: quartz
tags: [quartz, 源碼分析]



軟件版本:quartz-2.2.3oop

上一篇介紹了quartz的啓動過程,這篇主要介紹quartz的執線程模型,衆所周知,quartz並無採用定時器去完成定時任務,而是經過線程去完成。爲了簡化對quartz線程模型的理解,就暫用下理解方式吧源碼分析

| 類名 | 名詞解釋 |
|-
| SimpleThreadPool| 工頭兒 |
| WorkThread| 工人 |
| QuartzScheduleThread| 老闆 |
| JobRunShell | 工做,實現了Runnable|線程

從配置提及

從上述配置文件能夠看出quartz配置了一個線程池,實現名稱爲SimpleThreadPool, 這個線程池做用是什麼呢,我把註釋寫在代碼中。code

SimpleThreadPool——quartz裏的工頭兒

以上是這個類的成員變量,從上面的成員變量能夠看出,這個線程池用LinkedList存儲執行全部job的工人(Worker),來管理了全部的工人(Worker),那麼咱們就叫SimpleThreadPool爲工頭兒吧,老闆要分派任務,確定會找工頭兒,工頭在找空閒的工人來處理工做。
那工頭對老闆提供的接口是什麼呢,繼續往下看blog

上面的runInThread 就是工頭對老闆提供的對外接口,Runnable就是老闆安排的工做,流程是這樣的:接口

WorkerThread——quartz裏的工人

介紹了工頭,再來介紹一下工人,工頭兒經過調用work.run方法,工人就開始工做了
開一下代碼
文檔

工頭把任務交給工人,工人線程此時阻塞,當runnable被賦值時,工做線程被喚醒。流程圖以下:
get

QuartzSchedulerThread——Quartz裏面的老闆

QuartzSchedulerThread是quartz裏真正負責時間調度的類,這個線程的run方法也是最外層的loop。主要負責任務觸發,工做包裝,任務批處理的控制,這個方法是本章最難的一個方法了,看一下主loop

boss線程涉及的細節很是多,看一下流程圖
源碼

上面的流程介紹的差很少了,建議對着代碼看流程,有助於理解。it

線程模型圖

一圖以概之

以上是本身的一家之言,如有錯誤之處,請不吝賜教,共同提升。

參考文檔

相關文章
相關標籤/搜索