定时任务的并发_03

正常定时任务场景
在这里插入图片描述
任务1从第0秒开始执行,执行3秒结束
任务1再从第5秒开始执行,执行3秒结束,以此类推

每一个任务执行都不会有冲突,都不会有干扰,在规定的5秒时间内,任务1都能执行完成

定时任务的并发场景
在这里插入图片描述
什么是定时任务的并发?
任务2从第0秒开始执行,执行7秒结束,这个定时任务
任务2再从第5秒开始执行,这时第一个定时任务由于数量大尚未执行完成,任务2 开始第2次任务开始,执行7秒结束,但是,任务2执行的第一次和执行第二次有重叠部分,这一部分成为定时任务的并发,这一部分有可能处理相同的数据。
案例理解:在定时定点给一个用户发短信,一个用户只发一次,如果是定时任务并发,有可能给同一个用户发送2次短信

定时任务并发代码演示:

package com.gblfy.job;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.time.LocalTime;public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {LocalTime localTime = LocalTime.now();System.out.println(Thread.currentThread().getName()+"开始执行!" + localTime);try {//休眠7秒Thread.sleep(7000);} catch (InterruptedException e) {e.printStackTrace();}LocalTime endTime = LocalTime.now();System.out.println(Thread.currentThread().getName()+"结束执行!" + endTime);}
}

在这里插入图片描述

找一组分析一下:
Worker-1开始执行!17:55:08
Worker-2开始执行!17:55:12
Worker-1结束执行!17:55:15
Worker-3开始执行!17:55:17
Worker-2结束执行!17:55:19
Worker-1开始执行!17:55:22
Worker-3结束执行!17:55:24定时任务并发数据开始分析:
Worker-1和Worker-2 开始执行间隔5秒
Worker-1 开始执行和Worker-1 结束执行 间隔7秒Worker-2和Worker-3 开始执行间隔5秒
Worker-2 开始执行和Worker-2 结束执行 间隔7秒Worker-3和Worker-1 开始执行间隔5秒
Worker-3 开始执行和Worker-3 结束执行 间隔7

如何防止定时任务并发?
在Job类上添加@DisallowConcurrentExecution注解

防止并发示例

package com.gblfy.job;import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.time.LocalTime;@DisallowConcurrentExecution
public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {LocalTime localTime = LocalTime.now();System.out.println(Thread.currentThread().getName() + "开始执行!" + localTime);try {//休眠7秒Thread.sleep(7000);} catch (InterruptedException e) {e.printStackTrace();}LocalTime endTime = LocalTime.now();System.out.println(Thread.currentThread().getName() + "结束执行!" + endTime);}
}

在这里插入图片描述

找一组分析一下:
Worker-1开始执行!18:08:17
Worker-1结束执行!18:08:24
Worker-2开始执行!18:08:24
Worker-2结束执行!18:08:31
Worker-3开始执行!18:08:31
Worker-3结束执行!18:08:38
Worker-1开始执行!18:08:42
Worker-1结束执行!18:08:49定时任务并发数据开始分析:
Worker-1 开始执行和结束执行 间隔7秒
Worker-2 开始执行和结束执行 间隔7秒
Worker-3 开始执行和结束执行 间隔7秒Worker-2 第一次执行应该是 Worker-2开始执行!18:08:22,但是由于Worker-1还没有结束,等待Worker-1执行完成后,Worker-2开始执行Worker-3 第一次执行应该是 Worker-3开始执行!18:08:27,但是由于Worker-2 还没有结束,等待Worker-2执行完成后,Worker-3开始执行Worker-1 第二次执行应该是 Worker-1 开始执行!18:08:32,但是由于Worker-3 还没有结束,等待Worker-3 执行完成后,Worker-1开始执行,单这次定时任务会触发Qartz的Misfire的错过机制,等到下一个节点执行第2次的Worker-1 Worker-3结束执行!18:08:38
Worker-1开始执行!18:08:42
从以上数据,可以看出,当地二次执行 Worker-1时,按照上面的规则应该是Worker-1开始执行!18:08:38,对吧?
第1次错过:执行Worker-22次错过:执行Worker-3
当错过2次定时任务,就会Qartz的Misfire的错过机制Qartz的Misfire的错过机制:
当定时任务错过2次,之后会触发Qartz的Misfire的错过机制,触发及之后,上面的错过的2次定时任务会取消,等到下一个节点执行定时任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519638.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019阿里云开年Hi购季云通信分会场全攻略!

2019阿里云云上Hi购季活动已经于2月25日正式开启,从已开放的活动页面来看,活动分为三个阶段: 2月25日-3月04日的活动报名阶段、3月04日-3月16日的新购满返5折抢购阶段、3月16日-3月31日的续费抽豪礼5折抢购阶段。 做为整个Hi购季非常重要的一…

丁香园 武汉 神童_扒一扒武汉同济、协和规培待遇

首先,外科一般都比内科高,其中有手术是增收的主要原因,除了国家和医院给的基本工资以外其他的额外补助都在这儿先从协和医院开始说:内科各科室补助基本上是500-1000(其实大部分都是500,因为医院规定各科室的最低补助是…

mysql根据经纬度查询范围内数据,并根据距离排序

最近接到一个新需求,要根据经纬度查询指定范围内的数据,并且根据距离进行排序,网上找了找相关实现方法,记录一下。 java代码如下 public final class DistanceUtils {/*** 地球半径,单位 km*/private static final double EARTH…

JobDataMap 更新_04

第2篇讲述了怎样给job传递参数或者随机数,但是,这个随机数不会更新,举个例子,执行第一次job的时 随机数3 ,执行第2次job,随机数仍然是3,因为执行每一次job都会实例化job实例对象 JobDataMap更新…

高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用

在消息队列中,当消费者去消费消息的时候,无论是通过 pull 的方式还是 push 的方式,都可能会出现大批量的消息突刺。如果此时要处理所有消息,很可能会导致系统负载过高,影响稳定性。但其实可能后面几秒之内都没有消息投…

32岁程序员,补偿N+2:“谢谢裁我,让我翻倍!” 网友:榜样!

2019年的冬天,“冷”的有些频繁。12月19日,《马蜂窝被曝裁员40% UGC模式变现难?》爆火,据悉马蜂窝将裁员40%,交易中心成了“重灾区”,赔偿N2,留下的除搜索推荐、内容中心等核心部门外&#xff0…

TableStore:爬虫数据存储和查询利器

TableStore是阿里云自研的在线数据平台,提供高可靠的存储,实时和丰富的查询功能,适用于结构化、半结构化的海量数据存储以及各种查询、分析。 爬虫数据特点 在众多大数据场景中,爬虫类型的数据非常适合存储在TableStore。主要是…

PageHelper分页时超过最大数量的页数仍然返回数据,PageHelper分页失效

最近使用PageHelper来进行分页查询,发现一个问题:明明查询出来的总数只有5个,分页的时候每页10个,按理说只有第一页返回会有数据,第二页开始就没有数据了,但是实际情况却是第二页返回的数据与第一页一致&am…

三七女生节,解密阿里女程序员们的代码诗!

女生节快要到了,小编火速在阿里的程序员群体中发掘出了一群才华横溢的程序媛!今天就和大家分享下,阿里背后写代码、修bug的女生们! 巾帼不让须眉,如今越来越多的女性同胞参与到IT行业,这个行业因为她们的参…

Trigger触发器_05

什么是Trigger触发器? 定时任务按照什么方式去执行,按照Trigger设定好的方式去执行。比如说:按照每5秒执行一次 Trigger触发器的公共属性 jobKey属性:当Trigger触发时被执行job的身份 startTime属性:设定Trigger第一次…

python find方法的复杂度_python内置的方法的时间复杂度

下列字典的平均情况基于以下假设:1. 对象的散列函数足够撸棒(robust),不会发生冲突。2. 字典的键是从所有可能的键的集合中随机选择的。小窍门:只使用字符串作为字典的键。这么做虽然不会影响算法的时间复杂度,但会对常数项产生显…

云+X案例展 | 传播类:九州云 SD-WAN 携手上海电信,助力政企客户网络重构换新颜...

戳蓝字“CSDN云计算”关注我们哦!本案例由九州云投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击阅读原文丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“…

利用blink+MQ实现流计算中的超时统计问题

案例与解决方案汇总页:阿里云实时计算产品案例&解决方案汇总 一. 背景介绍 菜鸟的物流数据本身就有链路复杂、实操节点多、汇总维度多、考核逻辑复杂的特点,对于实时数据的计算存在很大挑战。经过仓配ETL团队的努力,目前仓配实时数据已覆…

excel导出java.lang.ArrayIndexOutOfBoundsException: 0 POI导出excel报错数组下标越界0

好久没写博客了,最近是有点懒了。。。 最近项目遇到个问题,用poi导出excel,本地和测试服务器都没问题,线上所有的导出都不能用,排查过JKD版本和配置文件都没问题,百思不得其解,最终问了朋友考虑…

Spring Schema整合Quartz_01

文章目录一、实现思路二、第一种实现方式2.1. 新建web项目2.2. 导入依赖2.3. 创建一个job类2.4. 创建配置文件2.5. 配置web.xml2.6.运行web服务,观察Quartz定时任务三、第二种实现方式3.1. 创建job类3.2. 修改spring-config.xml3.3. 运行web服务,观察Qua…

使用Grab的实验平台进行混沌实验编排

背景 对每个用户来说,Grab是一个可以叫车,叫外卖或付款的一个APP。对工程师来说,Grab是一个有许多服务并通过RPC交互的分布式系统,有时也可以叫做微服务架构。在数千台服务器上运行的数百个服务每天都有工程师在上面进行变更。每…

c++ 麦克风 录音 wav_小米有品上线新品,手机麦克风得到史诗级加强

手机里面是自带录音功能的,所以很多朋友都喜欢用手机来记录会议等内容,但是手机自带的麦克风用来录音并不合适,要么声音小,要么录下来的都是杂音,难道非要买一个专用的录音笔或者麦克风吗?其实没有那个必要…

云+X案例展 | 民生类: “中企通信 × TutorABC”共创全球数字教育科技新里程

本案例由中企通信投递并参与评选,CSDN云计算独家全网首发;更多关于【云X 案例征集】的相关信息,点击了解详情丨挖掘展现更多优秀案例,为不同行业领域带来启迪,进而推动整个“云行业”的健康发展。TutorABC荣获IDC 【讯…

ESB接口调用异常汇总

文章目录一、ESB接口前置知识1. ESB接口简述2. 生成的代码组成部分二、常见的异常汇总2.1. 场景1:不能解析某域名2.2. 场景2:调用服务连接超时三、调用服务前异常3.1. 异常描述3.2. CXF相关的jar和jdk的rt.jar中冲突3.3. 异常现象3.4. 异常日志3.5. 异常…

基于实时计算(Flink)与高斯模型构建实时异常检测系统

案例与解决方案汇总页:阿里云实时计算产品案例&解决方案汇总 1. 概述 异常检测(anomaly detection)指的是对不符合预期模式或数据集(英语:dataset)中其他项目的项目、事件或观测值的识别。实际应用包括…