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

ops/2024/12/22 14:25:11/

【问题】执行下面代码后,关闭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.ppmy.cn/ops/118257.html

相关文章

Nisshinbo日清纺pvs1114太阳模拟器手测

Nisshinbo日清纺pvs1114太阳模拟器手测

leetcode第169题:多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 示例 …

Loki 与 ELK 是两种常见的日志系统搭建方案对比

Loki 与 ELK 是两种常见的日志系统搭建方案,它们都有各自的优势和适用场景。让我们通过对比 Loki 和 ELK(Elasticsearch、Logstash、Kibana)在不同维度上的表现来分析它们的优缺点,并讨论它们的使用场景。 1. 架构对比 Loki Gr…

YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了 VanillaNet,一种拥抱设计优雅的神经网络架构。通过避免高深度、快捷方式和复杂操…

大语言模型知识点分享

1 目前主流的开源模型体系有哪些? Prefix Decoder 系列模型 核心点: 输入采用双向注意力机制,输出为单向注意力。双向注意力意味着输入的每个部分都可以关注到输入的所有其他部分,这在理解上下文时具有很强的优势。 代表模型&a…

关于区块链的安全和隐私

背景 区块链技术在近年来发展迅速,被认为是安全计算的突破,但其安全和隐私问题在不同应用中的部署仍处于争论焦点。 目的 对区块链的安全和隐私进行全面综述,帮助读者深入了解区块链的相关概念、属性、技术和系统。 结构 首先介绍区块链…

flink设置保存点和恢复保存点

增加了hdfs package com.qyt;import org.apache.flink.api.java.functions.KeySelector; import org.apache.flink.api.java.tuple.Tuple2;import org.apache.flink.runtime.state.storage.FileSystemCheckpointStorage;import org.apache.flink.streaming.api.datastream.Dat…

Dubbo 如何使用 Zookeeper 作为注册中心:原理、优势与实现详解

Dubbo 是一个高性能的 Java 分布式服务框架,而 Zookeeper 常被用作 Dubbo 的服务注册中心。Zookeeper 提供了分布式一致性和协调服务,Dubbo 通过 Zookeeper 实现服务注册与发现功能,确保在分布式环境下服务实例的动态管理和可靠发现。 下面是…