SpringBoot+定时器

定时器

  • 1.定时器的多种实现
    • 1.1 Timer + TimerTask)
    • 1.2 ScheduledExecutorService

1.定时器的多种实现

  • JDK自带的Timer + TimerTask
    • 优点:
      • 简单易用, 支持延迟执行和周期性执行任务
    • 缺点:
      • 在多线程环境下存在问题, 例如任务执行时间较长, 可能会影响其他任务的执行
      • 不适合在需要精确控制任务执行时间的场景
  • JDK提供的ScheduledExecutorService接口
    • 优点
      • 支持延迟执行和周期性执行任务
      • 用线程池来管理任务执行, 更灵活, 性能更好
      • 提供更多的任务调度策略
    • 缺点
      • 相较于Timer类,稍微复杂一些,需要手动创建线程池和调度器。
  • Spring的@Scheduled注解
  • Quartz框架

1.1 Timer + TimerTask)

java.util包下的类, 用于实现定时任务

实现步骤:
步骤一: 创建定时任务, 可以通过匿名内部类来实现. 在run()中执行任务
步骤二: 创建定时器, 调用定时器的方法执行定时任务

public static void main(String[] args) {// 创建定时器Timer timer = new Timer();// 创建定时器任务TimerTask task = new TimerTask() {@Overridepublic void run() {System.out.println("Hello world!");}};timer.schedule(task, 1000); // 1秒后执行一次timer.schedule(task, 2000, 2000); // 两秒后每两秒执行一次timer.scheduleAtFixedRate(task, 3000, 3000); // 3秒后每3秒执行一次timer.scheduleAtFixedRate(task, new Date(), 4000); // 每4秒执行一次
}

1.2 ScheduledExecutorService

public static void main(String[] args) {// 创建定时器任务TimerTask timerTask = new TimerTask() {@Overridepublic void run() {System.out.println("Hello world!");}};ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(2);scheduledThreadPool.schedule(timerTask, 1000, TimeUnit.MILLISECONDS);scheduledThreadPool.scheduleAtFixedRate(timerTask, 1000, 1000, TimeUnit.MILLISECONDS);
}

如果我们想在SpringBoot中使用ScheduledExecutorService

  1. 在配置类中配置Bean(ScheduledExecutorService)
@Configuration
public class ScheduledExecutorConfig {@Bean(destroyMethod = "shutdown")public ScheduledExecutorService scheduledExecutorService() {return Executors.newScheduledThreadPool(5); // 创建一个大小为5的线程池}
}
  1. 创建任务类
    1. 在Bean初始化时(@PostConstruct), 启动定时任务, 每5秒执行
    2. 将ScheduledFuture对象保存起来, 在需要取消定时任务的时候调用cancel()
@Component
public class MyScheduledTask {private ScheduledFuture<?> scheduledFuture;@Autowiredprivate ScheduledExecutorService scheduledExecutorService;@PostConstructpublic void scheduleTask() {Runnable task = () -> {// 定时任务逻辑System.out.println("Task executed!");};// 每隔5秒执行一次任务scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(task, 0, 5, TimeUnit.SECONDS);}public Boolean cancel() {if (scheduledFuture != null) {return scheduledFuture.cancel(false);}return false;}}

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

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

相关文章

携程Kar98k/hotelUuidKey算法分析

声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 这里只是我分析的分析过程,以及一些重要点的记录…

SpringBoot的 ResponseEntity类讲解(具体讲解返回给前端的一些事情)

概述&#xff1a;ResponseEntity是Spring框架中的一个类&#xff0c;用于封装HTTP响应的相关信息&#xff0c;包括状态码、响应头和响应体。它通常用于控制器方法中返回一个包含特定数据的HTTP响应。 ResponseEntity ResponseEntity类的主要特点如下&#xff1a; 可以自定义H…

【ARM】DS中Coretex-M处理器的常用寄存器介绍

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 了解ArmDS中Coretex-M处理器的常用寄存器的名称及作用。 2、 问题场景 在对Coretex-M处理器进行开发时&#xff0c;了解常用寄存器的名称及作用&#xff0c;可以&#xff1a; 编写正确的程序: 寄存器是程序员用…

前端form表单中提交时二次刷新问题

问题描述&#xff1a;在页面中的<form>里面添加button按钮&#xff0c;点击按钮触发事件后&#xff0c;js、jquery里面添加相应点击事件方法&#xff0c;方法里面控制页面跳转&#xff0c;触发事件后&#xff0c;页面会刷新两次&#xff0c;最后回到原来页面。 原因&…

UE4_AI_行为树_行为树快速入门指南

声明&#xff1a;学习笔记。 在 行为树快速入门指南 中&#xff0c;你将学会如何创建一个敌方AI&#xff0c;该AI看到玩家后会做出反应并展开追逐。当玩家离开视线后&#xff0c;AI将在几秒钟后&#xff08;这可根据你的需求进行调整&#xff09;放弃追逐&#xff0c;并在场景中…

使用 Postman 批量发送请求的最佳实践

背景 最近写了几个接口&#xff1a; 获取 books 的接口获取 likes 的接口获取 collections 的接口 但是我还是不放心&#xff0c;因为这些接口到底稳不稳定呢&#xff1f;上线后有没有隐患呢&#xff1f;所以我想做一个批量发送接口模拟~ 但是想要做到批量发送接口&#xf…

考研数学|《基础660》太难了!哪本习题集更适合打基础?

对于基础阶段的学习者来说&#xff0c;推荐使用汤家凤老师的《1800题》。这本题集包含了大量的数学题目&#xff0c;覆盖了考研数学的各个知识点和难度层次。题目设计全面&#xff0c;有助于系统地复习和巩固数学知识。 《1800题》提供了详细的解题思路和答案解析&#xff0c;…

XSS攻击及防御方式

XSS攻击 XSS&#xff08;Cross Site Scripting&#xff0c;跨站脚本攻击&#xff09;&#xff0c;是指攻击者利用站点的漏洞&#xff0c;在表单提交时&#xff0c;在表单内容中加入一些恶意脚本&#xff0c;当其他正常用户浏览页面&#xff0c;而页面中刚好出现攻击者的恶意脚…

高职(大专)教师结构化面试之复习攻略

一般高校自己组织的面试&#xff0c;结构化分为以下几部分&#xff1a; 1.岗位认知&#xff08;必背&#xff09; 2.职教热点&#xff08;很重要&#xff09; 3.教育教学&#xff08;包括教育教学理论、教育热点、教学相关问题解决&#xff09; 4.人际关系&#xff08;与领…

oops-framework框架 之 启动流程(三)

引擎&#xff1a; CocosCreator 3.8.0 环境&#xff1a; Mac Gitee: oops-game-kit 回顾 上篇博客中我们通过 oops-game-kit 模版构建了基础的项目&#xff0c;另外讲解了下assets目录结构和游戏配置文件的基本使用相关&#xff0c;详情内容可参考&#xff1a; oops-framewo…

Anaconda创建虚拟环境并使用Jupyter notebook应用虚拟环境

①创建Anaconda虚拟环境 一、管理员身份运行Anaconda Prompt 二、输入命令conda create --name your_env_name pythonx.x&#xff0c;your_env_name为自己环境明没&#xff0c;要对应自己的python版本&#xff0c;可以在命令行中输入python就可以进入python运行环境查看版本。…

DevOps工作流程之一:Apipost

随着互联网行业的不断发展&#xff0c;为了提高工作效率&#xff0c;加快软件的交付流程&#xff0c;越来越多企业的选择DevOps工作流程。DevOps旨在通过自动化流程和改善协作&#xff0c;实现软件开发、测试和交付的一体化&#xff0c;从而提高软件交付的质量和速度。而Apipos…

【蓝桥杯练习系统】基础练习(Java)(普通试题数+VIP试题数)

“蓝桥杯”练习系统 (lanqiao.cn) 基础入门 BASIC-01 AB问题 入门 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);int A scanner.nextInt();int B scanner.nextInt();System.out.print…

测试面试必备:HTTP请求和响应详解!

一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始&#xff0c;客户端按照指定的格式开始向服务端发送HTTP请求&#xff0c;服务端接收请求后&#xff0c;解析HTTP请求&#xff0c;处理完业务逻辑&#xff0c;最后返回一个HTTP的响应给客户端&#xff0c;HTTP的响应内容同…

wireshark 使用实践

1、打开wireshark软件&#xff0c;选择网卡&#xff0c;开始抓包 2、打开浏览器&#xff0c;访问一个http网站&#xff1a;这里我用 【邵武市博物馆】明弘治十一年&#xff08;1498&#xff09;铜钟_文物资源_福建省文 测试&#xff0c;因为它是http的不是https&#xff0c;方…

【OpenWRT】x86平台安装原版OpenWRT

在当今高度互联的数字化时代&#xff0c;网络设备已经成为我们日常生活和工作中不可或缺的一部分。为了满足不同用户对网络功能的个性化需求&#xff0c;开源社区涌现出了诸多优秀的项目&#xff0c;其中 OpenWrt 便是其中之一。 OpenWrt 是一款专注于为嵌入式设备提供定制化、…

Echarts自适应大小和字体的大屏可视化方案

痛点&#xff1a; 用 Echarts 写图表&#xff0c;屏幕大小改变时&#xff0c;字体不能同步缩放&#xff0c;图表不会自动适应容器 有这个困扰的同学请给颗 star https://github.com/wj100/auto-size-echart 此方案代码量少&#xff0c;使用简单&#xff0c;接管 echarts 配置…

搜维尔科技:矿山安全多人协同仿真演练系统!

搜维尔科技&#xff1a;矿山安全多人协同仿真演练系统&#xff01; 搜维尔科技&#xff1a;矿山安全多人协同仿真演练系统&#xff01;

小型路由器,为什么四个端口的IP在一个网段?

是的&#xff0c;路由器确实在不同网段&#xff0c;不过小型路由器&#xff08;宽带路由器&#xff09;一般都是为家用设计的&#xff0c;思路就是越简单好用越好&#xff0c;逻辑上其实它只有一个WAN口和一个LAN口&#xff0c;WAN口接公网一个地址&#xff0c;LAN口接你电脑一…

手写 UE4中的 TArray

#pragma once #include<iostream> #include<stdexcept> #define CHECK_INDEX_RANGE(Index) if (Index > ElementCount) throw std::out_of_range("索引超出界限")template<typename ElementType> class TArray {typedef unsigned int uint; pri…