一个普通的 Job 实现如下:

public class Job1 : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine(DateTime.Now + ": Job1" + m);
}
} public class Program
{
static void Main(string[] args)
{
var props = new NameValueCollection();
//使用简单线程池
props["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
//最大线程数
props["quartz.threadPool.threadCount"] = "";
//线程优先级:正常
props["quartz.threadPool.threadPriority"] = "Normal";
//初始化调度器
IScheduler scheduler = new StdSchedulerFactory(props).GetScheduler(); //Cron 触发器,每隔 1 秒触发一次
ITrigger trig = TriggerBuilder.Create().WithCronSchedule("0/1 * * * * ?").Build();
//将作业 Job1 加入调度计划中
scheduler.ScheduleJob(JobBuilder.Create<Job1>().Build(), trig);
//开始执行
scheduler.Start(); Console.ReadLine();
scheduler.Shutdown();
}
}

执行结果如下:可以看到,Job1 准确的每隔 1 秒执行一次

现在问题来了:如果 Job1 中的操作执行时间很长,超过了间隔时间 1 秒,会发生什么情况?代码如下:

public class Job1 : IJob
{
public void Execute(IJobExecutionContext context)
{
Console.WriteLine(DateTime.Now + ": Job1" + m);
//等待 5 秒
Thread.Sleep();
}
}

执行结果如下:

我们会发现,Quartz 仍然会按照我们设定的每隔 1 秒触发一次。

这是因为默认情况下,当Job执行时间超过间隔时间时,调度框架为了能让任务按照我们预定的时间间隔执行,会马上启用新的线程执行任务

若我们希望当前任务执行完之后再执行下一轮任务,也就是不要并发执行任务,该如何解决呢?

第一种方法:设置 quartz.threadPool.threadCount 最大线程数为 1。这样到了第二次执行任务时,若当前还没执行完,调度器想新开一个线程执行任务,但我们却设置了最大线程数为 1 个(即:没有足够的线程提供给调度器),则调度器会等待当前任务执行完之后,再立即调度执行下一次任务。(注意:此方法仅适用于Quartz中仅有一个Job,如果有多个Job,会影响其他Job的执行)

第二种方法:在 Job 类的头部加上 [DisallowConcurrentExecution],表示禁用并发执行。(推荐使用此方法)

//不允许此 Job 并发执行任务(禁止新开线程执行)
[DisallowConcurrentExecution]
public class Job1 : IJob
{
}

小记:Quartz 当 Job 执行时间超过触发间隔时间时所发生的情况的更多相关文章

  1. FP 某段SQL语句执行时间超过1个小时,并报错:ORA-01652: 无法通过 128 (在表空间 TEMPSTG 中) 扩展

    一.出现如下两个错误:1.某一段SQL语句执行时间超过1个小时:2.一个小时后,提示如下错误:ORA-01652: 无法通过 128 (在表空间 TEMPSTG 中) 扩展 temp 段ORA-065 ...

  2. 跟踪数据库中执行时间超过1.5秒的语句及SP,导入数据库

    跟踪 --============================================================================ --新建两个目录 D:\InOut\ ...

  3. spark SQL读取ORC文件从Driver启动到开始执行Task(或stage)间隔时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案

    1.背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式.查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop ...

  4. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;

    ArrayList和Array的区别: 相同点:1.两者都实现了IList.ICollection.IEnumerable接口:       2.两者都可以使用证书索引访问集合中的元素,包括读取和赋值 ...

  5. 小笔记:Timer定时间隔时间操作

    小笔记:Timer定时间隔时间操作,后面有时间再补充和完善: public class TimingSvc { /// <summary> /// 定时器,执行定时任务 /// </ ...

  6. Easyui datagrid 设置内容超过单元格宽度时自动换行显示

    datagrid 设置内容超过单元格宽度时自动换行显示 by:授客 QQ:1033553122 测试环境 jquery-easyui-1.5.3 问题描述 单元格内容超过单元格宽度不会自动化换行.如下 ...

  7. js前台计算两个日期的间隔时间

    js前台计算两个日期的间隔时间(时间差)原创 2017年08月28日 16:09:43 标签:javascript 1144在后台传来两个时间字段,从中解析出两个字符串类型的日期格式 需要在前台解析出 ...

  8. vs2010查看quartz.net 2.1.2的源码时其中一报错的解决方法

    问题: 使用vs2010查看quartz.net 2.1.2的源码时,报错: ..\Quartz.NET-2.1.2\server\Quartz.Server\Quartz.Server.2010.c ...

  9. Python3.x:简单时间调度Timer(间隔时间执行)

    Python3.x:简单时间调度Timer(间隔时间执行) threading模块中的Timer能够帮助实现定时任务,而且是非阻塞的: 代码: import threading import time ...

随机推荐

  1. POJ 2299 Ultra-QuickSort(线段树入门)

    Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Description In this problem, you have to ana ...

  2. Android中的Shape使用总结

    参考:http://www.cnblogs.com/gzggyy/archive/2013/05/17/3083218.html 在Android程序开发中,我们经常会去用到Shape这个东西去定义各 ...

  3. (转)github设置添加SSH

    很多朋友在用github管理项目的时候,都是直接使用https url克隆到本地,当然也有有些人使用 SSH url 克隆到本地.然而,为什么绝大多数人会使用https url克隆呢? 这是因为,使用 ...

  4. JAVA基础之对象的初始化

    本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初 ...

  5. nginx 一二事(3) - 反向代理以及负载均衡

    先来说说正向代理 就是普通的代理,记得高中年代偷跑去网吧是要办卡的 题外话: 就是这货...相信很多80同龄人都有吧...    回到正题,那正向代理就不让你直接访问网络,而需要登录一下网吧的某个系统 ...

  6. nginx 一二事(2) - 创建虚拟静态服务器

    一.什么是nginx 是一个C语言开发的HTTP反向代理服务器,性能非常高 一个俄罗斯的哥们开发的,官方提供的测试性能能够达到5W的并发,我的天呐~,实际测试差不多是2W,而淘宝的牛人可以优化到200 ...

  7. 第22章 DLL注入和API拦截(3)

    22.6 API拦截的一个例子 22.6.1 通过覆盖代码来拦截API (1)实现过程 ①在内存中对要拦截的函数(假设是Kernel32.dll中的ExitProcess)进行定位,从而得到它的内存地 ...

  8. Unity3d+Jenkins 自动编译iOS、Android版本

    1.在Unity3d中, 创建导出 iOS.Android 项目脚本 PerformBuild.cs ,放在Editor目录下(必须),如下: using UnityEditor; using Sys ...

  9. 本地ip被劫持,初始化hosts文件,及其作用与说明

    # Copyright (c) 1993-2009 Microsoft Corp.## This is a sample HOSTS file used by Microsoft TCP/IP for ...

  10. 理解SQL Server中的权限体系(下)----安全对象和权限

    原文:http://www.cnblogs.com/CareySon/archive/2012/04/12/SQL-Security-SecurableAndPermission.html 在开始阅读 ...