quartz任务执行

本文深入解析了Quartz核心线程QuartzSchedulerThread如何启动及执行定时任务的全过程,包括Trigger的工作机制、任务触发流程、ThreadPool的利用以及如何自定义任务执行策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

quartz是怎么执行定时任务的?


quartz的核心线程为QuartzSchedulerThread;

QuartzScheduler为Job的容器,一个Job由Job实现类和Trigger组成。

QuartzSchedulerThread负责执行Trigger已经被firing的任务。

QuartzSchedulerThread线程在什么时候启动?

在QuartzScheduler构建QuartzSchedulerThread时,Thread在构造方法中就调用start()启动线程。

在启动后,默认为暂停状态(通过变量paused来控制), 当调用Scheduler的start()时,

QuartzScheduler通过调用QuartzSchedulerThread的togglePause(false)来notify线程。QuartzSchedulerThread通过循环来等待start


任务是如何别触发的?

在QuartzSchedulerThread中运行中不停的循环。在循环中执行了如下操作

1. 取出下一个需要运行的Trigger。while循环等待。在while中,wait等待。

2. 当时间到了,线程就将任务封装成TriggerFiredBundle。

3. 通过JobRunShellFactory来borrowJobRunShell,借RunShell。JobRunShell是实现runnable接口的。

4. 调用QuartzSchedulerResources中得ThreadPool来执行shell。任务就开始执行。

在默认情况下,ThreadPool的线程个数为10,可以通过在quartz.properties中配置

org.quartz.threadPool.threadCount = 10 来自定同时运行的最大任务数量。


在任务的调度中:

Trigger提供任务下一次执行的时间。

QuartzScheduler作为quartz的最核心,是事件的接受者,和发出者。

QuartzSchedulerThread常驻内存。停停等等地执行定时任务。

JobRunShell为定时任务的具体执行者。

ThreadPool负责执行JobRunShell,执行之后放回ThreadPool,重复利用,提高并发量。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值