在 Quartz 的集群模式中,SchedulerThread线程多久会执行一次检查?

目录

引言

调度逻辑与时间计算

computeTimeToNextTrigger 方法

行为特点


引言

        在 Quartz 的集群模式中,SchedulerThread 线程的执行频率取决于触发器的状态和计划时间。没有一个固定的时间间隔,因为线程需要适应当前调度器的任务需求。这个线程主要任务是不断地检查并激活达到执行时间的触发器。线程的行为由下一个即将发生的触发器事件决定。如果没有立即要执行的触发器,线程会进入等待状态,直到达到下一个触发器的执行时间。

调度逻辑与时间计算

SchedulerThread 线程会计算距离下一个触发器触发时间还有多久,并在必要时休眠直到那个时间点。如果在等待期间触发器被更新或新触发器被添加,线程将被唤醒以重新计算最近的触发时间。

以下是关于如何计算等待时间的示例逻辑,这部分逻辑通常在 QuartzSchedulerThread 类的 run() 方法中实现:

while (!halted.get()) {try {long timeToNextTrigger = computeTimeToNextTrigger();long now = System.currentTimeMillis();while (timeToNextTrigger > now) {synchronized(sigLock) {sigLock.wait(timeToNextTrigger - now);}now = System.currentTimeMillis();timeToNextTrigger = computeTimeToNextTrigger();}// 触发时间已到,获取触发器并执行List<OperableTrigger> triggers = getTriggersToAcquire(now);fireTriggers(triggers);} catch (Exception e) {// 处理异常情况}
}

computeTimeToNextTrigger 方法

这个方法负责计算距离下一个触发器触发还有多长时间。它会检查所有已安排的触发器,并找出最近一个触发的时间点。

private long computeTimeToNextTrigger() {long shortestTime = Long.MAX_VALUE;// 遍历所有触发器,找到最近的触发时间for (Trigger trigger : allTriggers) {long timeUntilTrigger = trigger.getNextFireTime().getTime() - System.currentTimeMillis();if (timeUntilTrigger < shortestTime) {shortestTime = timeUntilTrigger;}}return shortestTime > 0 ? shortestTime : 0;
}

行为特点

  • 如果有触发器即将在很短的时间内触发,SchedulerThread 将几乎立即再次检查并激活触发器。
  • 如果所有触发器都已计划在较远的将来执行,线程将休眠较长时间,直到接近下一个触发时间点。
  • 在等待期间,如果触发器的状态发生变化或新触发器被添加,线程可以被外部事件(如数据库变更)唤醒。

总结来说,SchedulerThread 线程的检查频率完全由当前调度任务的动态需求决定,没有固定的“多久执行一次”的时间间隔,它根据需要进行自适应调整。这种设计使得 Quartz 能够高效地管理不同的任务调度需求,同时在集群模式中保持高效和响应性。

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

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

相关文章

【分布式 | 第四篇】限流算法实现方案

文章目录 4.限流算法4.1计算器4.2漏桶算法4.3令牌桶限流 4.限流算法 4.1计算器 计数器比较简单粗暴&#xff0c;比如我们要限制1s能够通过的请求数实现的思路就是从第一个请求进来开始计时&#xff0c;在接下来的1s内&#xff0c;每个请求进来请求数就1&#xff0c;超过最大请…

删除二叉搜索树中的节点

题目链接 删除二叉搜索树中的节点 题目描述 注意点 节点值唯一root 是合法的二叉搜索树节点数的范围 [0, 10000] 解答思路 可以根据二叉搜索树的性质找到要删除的节点&#xff0c;关键是删除节点后怎么重新构建成一棵新的二叉搜索树首先要找到的是删除节点node的父节点nod…

微信小程序:9.小程序配置

全局配置文件 小程序根目录下的app.json文件是小程序的全局配置文件。 常用的配置文件如下: pages 记录当前小程序所有的页面存放路径信息 window 全局设置小程序窗口外观 tabBar 设置小程序底部的tabBar效果 style 是否启用新版style 小程序窗口的组成部分 了解windo节点常…

【NC16664】合唱队形

题目 合唱队形 此题可以用动态规划&#xff0c;也可以用贪心和二分 思路 此题就是求一个数组中山脉数组的最大长度。思路很直观&#xff0c;这里直接给出算法&#xff1a; 记数组元素个数为 n n n&#xff0c;遍历数组每个元素&#xff0c;对每个元素&#xff1a; (1) 求出这…

场景文本检测识别学习 day07(BERT论文精读)

BERT 在CV领域&#xff0c;可以通过训练一个大的CNN模型作为预训练模型&#xff0c;来帮助其他任务提高各自模型的性能&#xff0c;但是在NLP领域&#xff0c;没有这样的模型&#xff0c;而BERT的提出&#xff0c;解决了这个问题BERT和GPT、ELMO的区别&#xff1a; BERT是用来…

redis 结合Lua脚本实现 秒杀、防止超卖

需求&#xff1a;同1商品单个用户限购1件&#xff0c;库存不会超卖1 Lua脚本&#xff0c;因可实现原子性操作&#xff0c;这个文件放到resources目录下 local userId KEYS[1] -- 当前秒杀的用户 ID local goodsId KEYS[2] -- 秒杀的商品 ID -- 订单id local orderId ARGV[1…

微信收款码0.2费率开通

很多人想申请低手续费率的收款码不知从何下手&#xff0c;在参考了大量博客教学之后&#xff0c;终于搞懂了详细流程以及注意事项。在此记录一下。我申请的是一个只需要0.2%费率的微信收款码&#xff0c;申请时间是2022年2月12日。申请之前只需要准备营业执照和法人身份z&#…

【iconv】Linux c++ 中文字符串转十六进制 GBK 编码/内码

文章目录 问题描述c 代码CMakeLists.txt参考链接 问题描述 Linux 系统默认使用的是 UTF-8 编码&#xff0c;并且 c 中没有标准库可以直接将中文字符转为 GBK 编码/内码。因此需要借助 iconv 库来实现。 在实现代码之前&#xff0c;可以在一下在线工具网站进行中文字符到各个编…

​可视化大屏C位图:园区鸟瞰

将园区鸟瞰图作为可视化大屏设计的焦点图有以下几个好处&#xff1a; 提供全局视图&#xff1a;园区鸟瞰图可以展示整个园区的布局和结构&#xff0c;提供全局视图。这对于大型园区或复杂的场所来说尤为重要&#xff0c;用户可以一目了然地了解整个园区的规模、分布和关联关系…

使用新版ESLint,搭配Prettier使用的配置方式

概述 ESLint重大更新(9.0.0版本)后,将不再支持非扁平化配置文件,并且移除了与Prettier冲突的规则,也就是说与Prettier搭配使用,不再需要使用插件“eslint-config-prettier”来处理冲突问题。 注:使用新版的前提条件是Node.js版本必须是18.18.0、20.9.0,或者是>=21.1…

ESP-IDF编译系统详解(1)

接前一篇文章&#xff1a;VSCode ESP-IDF安装与配置全过程 本文内容主要参考&#xff1a; 《ESP32-C3物联网工程开发实战》 —— 乐鑫科技 编著 特此致谢&#xff01; 前文已经详述了ESP-IDF开发环境的搭建&#xff0c;包括ESP-IDF的下载与安装完整流程&#xff0c;以及VSCo…

怎么排查K8S容器当中的Java程序内存泄露问题

今天早上发现生产线其中的一个服务在凌晨的时候突然重启了&#xff0c;内存突然从1G升到1.8G&#xff0c;CPU使用量从0.1升到了0.28&#xff0c;说明在这个时间点&#xff0c;内存突增达到了限额以上&#xff0c;服务重启了。因为这个服务布署了多节点&#xff0c;这次重启对业…

故障诊断 | 基于GASF-CNN的状态识别研究

概述 抗蛇行减振器作为高速动车组二系悬挂系统的关键零部件,对改善车辆运动稳定性、提高车辆系统的临界速度具有重要意义。抗蛇行减振器在高级修时需全部进行拆解维修或报废处理,若在高级修中的三、四级修时其性能尚能够满足实际使用要求,将其过早地拆解检修或者报废换新无…

【springboot整合redis】异常处理

这个问题是在使用springboot整合redis时&#xff0c;创建好工程后&#xff0c;测试时所产生的 报错&#xff1a; org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: NOAUTH A…

共享购:融合社交分享与消费返利的创新电商模式

共享购电商模式是一种独特的商业模式&#xff0c;巧妙地将社交分享与消费返利结合&#xff0c;让消费者在购物的同时&#xff0c;也能通过平台资产奖励实现价值的双重增长。该平台资产体系主要由共享值和共享积分两大要素构成&#xff0c;共同构建了一个充满活力的电商生态系统…

树莓派的应用场景都有哪些?

树莓派是一种小型、低功耗、高性能的计算机主板&#xff0c;其广泛的应用场景包括但不限于以下几个方面&#xff1a; 媒体中心&#xff1a;树莓派可以连接到电视或音响系统&#xff0c;并安装如Kodi等媒体播放器软件&#xff0c;成为一个功能完整的家庭媒体中心&#xff0c;用…

部署一个自己的GPT客户端[以ChatGPT-Next-Web为例]

1. 引言 当我们有一个openai的key又想通过客户端进行访问对话功能的时候&#xff0c;chatGPT-next-web是一个选项&#xff08;仅限是一个选项&#xff0c;也有更好的方案&#xff09;。 2. 准备步骤 服务器背景&#xff1a; Ubuntu 20.04 2.1 docker的安装 首先应该保证服…

如何在three.js中画3D圆弧及半圆弧组成圆

在three.js中画圆弧以及画圆&#xff0c;首先会想到的是ArcCurve&#xff0c;这个曲线API&#xff0c;经过使用发现&#xff0c;他是一个二维平面的&#xff0c;也就是说只在X-Y轴组成的平面可以使用&#xff0c;三维坐标使用的时候不生效&#xff0c;比如说&#xff1a;我期望…

巴特沃斯滤波原理及代码实现(matlab详细过程版)

目录 一、算法原理1、原理概述2、参考文献 二、代码实现三、结果展示 本文由CSDN点云侠原创&#xff0c;原文链接。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、原理概述 巴特沃斯滤波器&#xff08;Butterworth filt…

SSH功能及其在网络通信中的应用

SSH功能及其在网络通信中的应用 摘要&#xff1a; SSH&#xff08;Secure Shell&#xff09;是一种网络协议&#xff0c;用于在不安全的网络中提供加密的远程登录和其他网络服务。本文将详细介绍SSH的基本概念、工作原理、常用功能以及在网络通信中的应用。通过阅读本文&#…