org.quartz.jobStore.misfireThreshold = 60000 #60秒 默认值
那么执行第一次作业是在10:01秒,这时会设定下一次的执行时间为10:02秒,要等一个作业执行完之后才有可用线程,大概要在10:11秒才能执行前面安排的应该在10:02执行的作业,这时就会用到misfireThreshold, 因为10:11与10:02之间的差值小于6000,所以执行该作业,并以10:02为基准设置下一次执行时间为10:03,这样造成每次实际执行时间与安排时间错位
如果 org.quartz.jobStore.misfireThreshold = 6000 #秒
同样,在10:11计划执行安排在10:02的作业,发现10:11与10:02之间的差值小于6000,那么直接跳过该作业,执行本应在当前时间执行的作业,这时候会以10:11为基准设定下次作业执行时间为10:12
misfireThreshold只有当job任务被阻塞时才有效,如果线程池里线程很多,该参数没有意义。所以大部分时候只对有状态的job才有意义。
public class HelloJob implements StatefulJob {
public void execute(JobExecutionContext context) {
DateFormat df = new SimpleDateFormat("hh:mm:ss");
System.err.println("[" + Thread.currentThread().getName() + "] Now: "
+ df.format(context.getFireTime()) + " Scheduled: "
+ df.format(context.getScheduledFireTime()) + " Previous: "
+ df.format(context.getPreviousFireTime()) + " Next: "
+ df.format(context.getNextFireTime()));
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
执行次数:
SimpleTrigger trigger2 = new SimpleTrigger();
trigger2.setName("trigger2");
trigger2.setGroup("group");
trigger2.setStartTime(new Date());
trigger2.setRepeatInterval(2000);
trigger2.setRepeatCount(4);
sched.scheduleJob(job2, trigger2);
执行结果:
60秒执行任务:
[DefaultQuartzScheduler_Worker-2] Now: 05:36:42 Scheduled: 05:36:42 Previous: 05:36:40 Next: 05:36:44
[DefaultQuartzScheduler_Worker-3] Now: 05:36:52 Scheduled: 05:36:44 Previous: 05:36:42 Next: 05:36:46
[DefaultQuartzScheduler_Worker-4] Now: 05:37:02 Scheduled: 05:36:46 Previous: 05:36:44 Next: 05:36:48
[DefaultQuartzScheduler_Worker-5] Now: 05:37:12 Scheduled: 05:36:48 Previous: 05:36:46 Next: 05:36:50
3秒执行任务:
[DefaultQuartzScheduler_Worker-2] Now: 05:41:36 Scheduled: 05:41:36 Previous: 05:41:34 Next: 05:41:38
[DefaultQuartzScheduler_Worker-3] Now: 05:41:46 Scheduled: 05:41:46 Previous: 05:41:36 Next: 05:41:48
[DefaultQuartzScheduler_Worker-4] Now: 05:41:56 Scheduled: 05:41:56 Previous: 05:41:46 Next: 05:41:58
[DefaultQuartzScheduler_Worker-5] Now: 05:42:06 Scheduled: 05:42:06 Previous: 05:41:56 Next: 05:42:08
所以说:misfireThreshold 参数对执行次数并无影响,只是对cpu对线程处理的机制(会影响效率)有所影响而已。
分享到:
相关推荐
Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解 Quartz使用详解
Quartz定时任务详解
quartz自动调度的3种调度形式+传参 1.单纯的quartz调度 2.spring+quartz调度
Spring整合Quartz,在运行的过程中动态改变Trigger的参数
1. 首先,说说 quartz.config 文件1) 先将上一篇中的配置贴出来# You can configure your scheduler i
定时任务时间参数转换,cron表达式轻易转换,更易理解时间参数设置类型及转换含义
详细介绍CronExpression表达式设定定时任务的规则
java quartz详解
Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。 Quartz中有两个基本概念:作业和触发器。作业是能够调度的可执行任务,触发器提供了对作业的调度。
赠送jar包:quartz-2.3.2.jar; 赠送原API文档:quartz-2.3.2-javadoc.jar; 赠送源代码:quartz-2.3.2-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Quartz中文教程学习,初学者最实用了
赠送jar包:quartz-2.3.0.jar; 赠送原API文档:quartz-2.3.0-javadoc.jar; 赠送源代码:quartz-2.3.0-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
quartz_corn参数配置_复杂表达式.pdf 讲解如何配置quartz_corn
QuartzAPI中文chm文档,快速学习Quartz的常用工具
Quartz中文入门教程 前言 Quartz让任务调度简单 Quartz的发展史 上手Quartz Quartz内部架构 作业 作业管理和存储 有效作业存储 作业和触发器 调度一个作业 用调度器(Scheduler)调用你的作业 编程调度...
很详细的Quartz中文API文档
关于spring中quartz的配置
Quartz.net 中文注释XML, 放入DLL同目录,VS就有中文注释
定时任务quartz
有了它,quartz不再抽象。 资源来自于互联网,Chuck Cavaness 著 Unmi(隔叶黄莺) 译 。 主要内容: 1.quartz起步和简单示例 2.Job部署、存储和持久化 3.Cron触发器及相关内容 ...7.工作流中使用Quartz 8.附录:配置参考