quartz源码分析——执行引擎和线程模型


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


软件版本:quartz-2.2.3

上一篇介绍了quartz的启动过程,这篇主要介绍quartz的执线程模型,众所周知,quartz并没有采用定时器去完成定时任务,而是通过线程去完成。为了简化对quartz线程模型的理解,就暂用下理解方式吧

类名
SimpleThreadPool
WorkThread
QuartzScheduleThread
JobRunShell

从配置说起

981342-20180428145040197-1054283453.jpg

从上述配置文件可以看出quartz配置了一个线程池,实现名称为SimpleThreadPool, 这个线程池作用是什么呢,我把注释写在代码中。

SimpleThreadPool——quartz里的工头儿

981342-20180428145044664-2011504053.jpg

以上是这个类的成员变量,从上面的成员变量可以看出,这个线程池用LinkedList存储执行所有job的工人(Worker),来管理了所有的工人(Worker),那么我们就叫SimpleThreadPool为工头儿吧,老板要分派任务,肯定会找工头儿,工头在找空闲的工人来处理工作。
那工头对老板提供的接口是什么呢,继续往下看

981342-20180428145103224-598173977.jpg

上面的runInThread 就是工头对老板提供的对外接口,Runnable就是老板安排的工作,流程是这样的:

981342-20180428145118145-786682751.jpg

WorkerThread——quartz里的工人

介绍了工头,再来介绍一下工人,工头儿通过调用work.run方法,工人就开始工作了
开一下代码
981342-20180428145150377-3747573.jpg

981342-20180428145156802-661214918.jpg

工头把任务交给工人,工人线程此时阻塞,当runnable被赋值时,工作线程被唤醒。流程图如下:
981342-20180428145206602-1287980177.jpg

QuartzSchedulerThread——Quartz里面的老板

QuartzSchedulerThread是quartz里真正负责时间调度的类,这个线程的run方法也是最外层的loop。主要负责任务触发,工作包装,任务批处理的控制,这个方法是本章最难的一个方法了,看一下主loop
981342-20180428145219298-56780756.jpg
boss线程涉及的细节非常多,看一下流程图
981342-20180428145238716-788198482.jpg

981342-20180428145244739-552557175.jpg

上面的流程介绍的差不多了,建议对着代码看流程,有助于理解。

线程模型图

一图以概之
981342-20180428145252268-1781227883.jpg

以上是自己的一家之言,若有错误之处,请不吝赐教,共同提高。

参考文档

转载于:https://www.cnblogs.com/liuroy/p/7517777.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值