Bug:ThreadPoolTaskScheduler搭配CronTask完成定时任务,关闭scheduler后CronTask任务仍然执行?

【问题】执行下面代码后,关闭ThreadPoolTaskScheduler,CronTask仍然继续执行。

@Configuration
public class config {@Beanpublic String getString() throws InterruptedException {Runnable runnable = () -> {try {System.out.println("hello runnable");Thread.sleep(2000);} catch (Throwable e) {e.printStackTrace();}};CronTask cronTask = new CronTask(() -> {try {System.out.println("hello cronTask");Thread.sleep(2000);} catch (Throwable e) {e.printStackTrace();}}, "* * * * * ?");ThreadPoolTaskScheduler testScheduler = new ThreadPoolTaskScheduler();testScheduler.setPoolSize(2);testScheduler.initialize();testScheduler.scheduleWithFixedDelay(runnable, 10);testScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger());Thread.sleep(6000);testScheduler.setAwaitTerminationMillis(100);testScheduler.setWaitForTasksToCompleteOnShutdown(true);testScheduler.shutdown();System.out.println("shutdown");return new String("123");}
}
=================================================
hello runnable
hello cronTask
hello runnable
hello cronTask
hello runnable
shutdown
hello cronTask

schedule(CronTask task):使用 CronTask 允许你基于 Cron 表达式定义复杂的调度规则。任务将在指定的时间点按 Cron 表达式执行,例如每天的特定时间或每小时。
scheduleWithFixedDelay(Runnable task, long delay):这个方法基于固定的延迟时间调度任务。任务在上一次执行完成后,等待指定的延迟时间,然后再次执行。适合需要间隔性执行的任务,不关心具体的执行时间。

【解决办法】

setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean executeExistingDelayedTasks)
  • 如果设置为 true,在调用 shutdown 方法后,已经排定但尚未执行的延迟任务仍然会被执行。
  • 如果设置为 false,则在 shutdown 后,所有已排定的延迟任务将不会被执行。
testScheduler.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

《程序猿之设计模式实战 · 适配器模式》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

【后端开发】JavaEE初阶—线程安全问题与加锁原理(超详解)

前言: 🌈上期博客:【后端开发】JavaEE初阶—Theard类及常见方法—线程的操作(超详解)-CSDN博客 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🌈小编会在后端开发的学习中不…

关于javascript中防抖和节流的使用详解

防抖(Debounce)和节流(Throttle)是两种常见的优化技巧,通常用于控制函数在短时间内频繁触发的场景,尤其是在处理用户输入、滚动、窗口大小调整等事件时。它们的主要目的是减少不必要的函数调用,…

超详细超实用!!!AI编程之cursor编写设计模式开闭原则实例(四)

云风网 云风笔记 云风知识库 一、设计模式开闭原则定义 当应用的需求改变时,在不修改软件实体(项目模块、类、接口方法)的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。即软件实体应当对扩展开…

【Linux】nginx连接前端项目

文章目录 一、项目编译1.编译文件2.dist文件 二、Linux nginx配置三、启动nginx 一、项目编译 1.编译文件 2.dist文件 二、Linux nginx配置 在Xshell软件中,点击CtrlAltF进入文件传输找到地址:/usr/local/nginx/html将dist文件传入 找到nginx.conf&…

git add成功后忘记commit的文件丢了?

本文目标:开发人员,在了解git fsck命令用法的条件下,进行git add成功但由于误操作导致丢失的文件找回,达到找回丢失文件的程度。 文章目录 1 痛点2 解决方案3 总结/练习 1 痛点 开发过程中,分支太多(基线分…

CREO教程——2 绘制标准图纸

CREO教程——2 绘制标准图纸 说明:继承第一章设置好的配置文件,这一章进行学习分享如何定制自己的图纸图框,参考国家标准距,定制属于设计师或单位的通用图框。 1.设置工作目录 1.1设置工作目录 1.打开软件设置工作目录&#x…

u盘格式化怎么恢复数据?四款工具来救急!

工作中真的没少碰到过那些让人头疼的数据丢失问题,特别是U盘里的宝贝数据一不小心就“蒸发”了,简直让人欲哭无泪。不过别担心,我作为一个数据恢复的新手小白,最近可是亲测了几款超给力的数据恢复软件,今天就来跟大家分…

19c-TNS-12541: TNS:no listener

有套19c单机,没应用任何的补丁,使用lsnrctl status查看监听是异常的,但是lsnrctl start发现监听已运行,当前业务连接都正常, orcl:/home/oracledb> lsnrctl status LSNRCTL for Linux: Version 19.0.0.0.0 - Pro…

打造灵活DateTimePicker日期时间选择器组件:轻松实现时间的独立清除功能

element ui中日期和时间选择器(DateTimePicker)是一个常见且重要的组件。它允许用户轻松地选择日期和时间,极大地提升了用户体验。然而,在某些场景下,用户可能需要更细粒度的控制,例如单独清除已选择的时间…

下载与安装|Inventor 2025百度云资源分享附教程

如大家所了解的,Inventor是一款专业的三维可视化实体建模软件,主要用于各类二维机械制图、三维制图的设计和开发等操作,可以广泛地应用于零件设计、钣金设计、装配设计等领域。 不同领域的应用证明了Inventor具有强大的兼容性,基…

监控易监测对象及指标之:全面监控Oracle ODBC数据库

在数字化时代,数据库作为存储和管理企业核心数据的基石,其稳定性和性能直接关系到业务的连续性和效率。Oracle数据库以其强大的功能和稳定性,广泛应用于各行各业。为了确保Oracle数据库的稳定运行和高效性能,对其进行全面监控显得…

备战软考Day04-计算机网络

1、计算机网络的分类 2、七层网络体系结构 3、网络的设备与标准 4、TCP/IP协议族 TCP/IP作为Internet的核心协议,被广泛应用于局域网和广域网中,目前已成为事实上的国际标准 1、TCP/IP分层模型 TCP/IP协议是Internet的基础和核心,和OSI参考…

git命令将已经commit的代码push到其他分支

文章目录 一:对于多分支的代码库,将提交记录从一个分支转移到另一个分支是常见需求方法1:撤销commit操作方法2:实用命令git cherry-pick 来移动commit 二、不小心revert导致代码消失的问题 一:对于多分支的代码库&…

【Diffusion分割】FDiff-Fusion:基于模糊学习的去噪扩散融合网络

FDiff-Fusion: Denoising diffusion fusion network based on fuzzy learning for 3D medical image segmentation 摘要: 近年来,去噪扩散模型在图像分割建模中取得了令人瞩目的成就。凭借其强大的非线性建模能力和优越的泛化性能,去噪扩散模…

好用的todolist待办清单软件下载推荐

在快节奏的现代生活中,时间管理变得尤为重要。todolist待办清单管理软件,作为一种高效的任务管理工具,它帮助我们记录、跟踪和管理日常任务,从而提升个人效率。 在众多的待办软件中,敬业签以其出色的用户体验脱颖而出…

Vue2电商项目(四) Detail模块

文章目录 一、配置Detail路由1. 将Detail组件配置为路由组件2. 将路由配置文件拆分3. 声明式导航跳转到Detail跳转时存在的问题:页面滚动条还在下边 二、配置API及vuex三、放大镜及下方轮播图1. Detail组件传递放大镜数据2. 读取vuex数据的经典错误undefined3. 放大…

力扣234 回文链表 Java版本

文章目录 题目描述代码 题目描述 给你一个单链表的头节点 head ,请你判断该链表是否为 回文链表 。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true 示例 2&…

【集合拆分+多线程并行处理,拿来即用】

文章目录 一.业务场景二.拆分流程三. 简单上个List拆分的demo四.测试结果五.小结 一.业务场景 节假日后第一天,上完班有点累,回到家稍微写点简单的东西。 我们项目里面有这样一业务场景,要计算全公司所有人某几个月内每天的考勤机打卡加班工时…

docker从0到1运行mysql(最详细且绝对成功版)

前置环境 CentOS7.8 安装docker yum install -y docker 启动docker并检查docker状态 systemctl start docker systemctl status docker 这样即正常 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 vim /etc/docker/daemon.json …