当前位置: 首页 > news >正文

Spring的@Scheduled

Spring的@Scheduled的默认线程池数量为1,也就是说定时任务是单线程执行的。这意味着最多同时只有一个任务在执行。当一个任务还在执行时,其他任务会等待其完成,然后按照其预定的执行策略依次执行。

测试代码:

启动类上加注解@EnableScheduling开启任务调度功能,具体任务调度代码如下:

@Slf4j
@Component
public class Scheduler {// 每两秒执行一次@Scheduled(fixedRate = 2000)public void mockMethod1() {long threadId = Thread.currentThread().getId();String threadName = Thread.currentThread().getName();log.info("mockMethod1 start with current thread id: {}, name: {}", threadId, threadName);try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}log.info("mockMethod1 end with current thread id: {}, name: {}", threadId, threadName);}@Scheduled(fixedRate = 2000)public void mockMethod2() {long threadId = Thread.currentThread().getId();String threadName = Thread.currentThread().getName();log.info("mockMethod2 start with current thread id: {}, name: {}", threadId, threadName);try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}log.info("mockMethod2 end with current thread id: {}, name: {}", threadId, threadName);}}

结果:可以看到mockMethod1执行完才会执行mockMethod2,而且是单线程执行
在这里插入图片描述

源码

在这里插入图片描述

Spring的@Scheduled有个特点就是,确保任务执行完毕后才会再次调度下一次执行

想要同时执行多个Scheduled,怎么办?

解决

1.当如果有程序有多个任务的话需要修改配置,让其变为多线程执行,这种配置不会破坏Scheduled的特点

# 设置任务调度线程名称前缀
spring.task.scheduling.thread-name-prefix=task-schedule-
# 设置任务调度线程池大小
spring.task.scheduling.pool.size=10
# 设置任务调度线程池关闭时等待所有任务完成
spring.task.scheduling.shutdown.await-termination=true

结果
在这里插入图片描述
2.使用@Async配置线程池,这种配置会破坏Scheduled的特点

启动类上加注解@EnableAsync开启异步功能,然后配置线程池

@Configuration
public class AppConfig {@Bean("taskExecutor")public ThreadPoolTaskExecutor taskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(6); // 设置核心线程数executor.setMaxPoolSize(9); // 设置最大线程数executor.setQueueCapacity(25); // 设置任务队列容量executor.setThreadNamePrefix("executor-");return executor;}
}

代码上加上异步

@Async("taskExecutor")
@Scheduled(fixedRate = 2000)
public void mockMethod1() {long threadId = Thread.currentThread().getId();String threadName = Thread.currentThread().getName();log.info("mockMethod1 start with current thread id: {}, name: {}", threadId, threadName);try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}log.info("mockMethod1 end with current thread id: {}, name: {}", threadId, threadName);
}

结果
在这里插入图片描述

相关文章:

Spring的@Scheduled

Spring的Scheduled的默认线程池数量为1,也就是说定时任务是单线程执行的。这意味着最多同时只有一个任务在执行。当一个任务还在执行时,其他任务会等待其完成,然后按照其预定的执行策略依次执行。 测试代码: 启动类上加注解Enab…...

IP隧道技术原理

简介 IP隧道技术是一种将一个协议的数据包封装在另一个协议的数据包中进行传输的技术。在网络通信中,不同的网络协议之间可能存在不兼容的情况,这时候就需要使用IP隧道技术来解决这个问题。 原理 IP隧道技术的原理是将一个协议的数据包封装在另一个协议…...

Docker私有仓库

Docker私有仓库 Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去。但是,有时候我们的服务器无法访问互联网,…...

LLM微调 | Prefix-Tuning, Prompt-Tuning, P-tuning, P-tuning-v2

🔥 下面我只是分析讲解下这些方法的原理以及具体代码是怎么实现的,不对效果进行评价,毕竟不同任务不同数据集效果差别还是挺大的。 文章目录 0、hard prompt & soft prompt区别1、Prefix-Tuning2、Prompt-Tuning3、P-tuning4、P-tuning-v25、来看看adapter,lora,pref…...

Ansible 的脚本 --- playbook 剧本

目录 playbook 剧本 playbooks 本身由以下各部分组成 定义、引用变量 指定远程主机sudo切换用户 when条件判断 迭代 Templates 模块 1.先准备一个以 .j2 为后缀的 template 模板文件,设置引用的变量 2.修改主机清单文件,使用主机变量定义一个变…...

CSP-J模拟赛 / 买文具

限制条件 时间限制: 1000 ms, 空间限制: 256 MB 输入文件: pen.in, 输出文件:pen.out 题目描述 开学啦,为了准备新学期的课程学习,小贝到商店买文具。小贝买完文具回家,告诉妈妈说她买了钢笔、圆珠笔和铅笔总共x支&#xff0c…...

leecode算法--每日一题1

二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 前提条件必须满足: 目标数组必须是有序数组 所以…...

LViT:语言与视觉Transformer在医学图像分割

论文链接:https://arxiv.org/abs/2206.14718 代码链接:GitHub - HUANGLIZI/LViT: This repo is the official implementation of "LViT: Language meets Vision Transformer in Medical Image Segmentation" (IEEE Transactions on Medical I…...

蓝桥杯上岸每日N题 第五期(山)!!!

蓝桥杯上岸每日N题第五期 ❗️ ❗️ ❗️ 同步收录 👇 蓝桥杯Java 省赛B组(初赛)填空题 大家好 我是寸铁💪 冲刺蓝桥杯省一模板大全来啦 🔥 蓝桥杯4月8号就要开始了 🙏 距离蓝桥杯省赛倒数第3天 ❗️ ❗️ ❗️ 还没背熟模…...

IDEA Writing classes... 比较慢

IDEA配置修改如下: 1、File -> Settings… 2、Build,Execution,Deployment -> Compiler Build process heap size 配置为 20483、Build,Execution,Deployment -> Compiler -> ActionScript & Flex C…...

opencv中轮廓相关属性

一、介绍 findContours() :The function retrieves contours from the binary image。 二、代码 void main() {Mat src imread("match00.bmp", IMREAD_GRAYSCALE);Mat mask;threshold(src, mask, 128, 255, cv::THRESH_BINARY_INV);Mat element cv::g…...

Leetcode 144. 二叉树的前序遍历

题目描述 题目链接&#xff1a;https://leetcode.cn/problems/binary-tree-preorder-traversal/description/ 代码实现 class Solution {List<Integer> l new ArrayList<>();public List<Integer> preorderTraversal(TreeNode root) {preoder(root);re…...

医学影像PACS系统源码:多功能服务器和阅片系统

PACS系统是以最新的IT技术为基础&#xff0c;遵循医疗卫生行业IHE/DICOM3.0和HL7标准&#xff0c;开发的多功能服务器和阅片系统。通过简单高性能的阅片功能&#xff0c;支持繁忙时的影像诊断业务&#xff0c;拥有保存影像的院内Web传输及离线影像等功能&#xff0c;同时具有备…...

php 生成连续递增的Excel列索引 可以控制多少列

今天遇到需要生成对应的下拉&#xff0c;下拉的类 需要PHP 输出一个数组 如 A、B、C、D 到Z 列后 Excel 的列就变成 AA 、AB、 AC 依次类推 查询得知 Excel 最大列数 16384 最大行数 1048576 下面演示3000列或行 <?php$idx [idx > 0];for ($i …...

Openstack等私有云

1 OpenStack 计算&#xff1a;部署管理虚拟机存储&#xff1a;块存储 Cinder 和 对象存储 Swift网路&#xff1a;管理网络身份&#xff1a;管理用户和权限镜像&#xff1a;管理镜像用于快速部署新的虚拟机仪表盘&#xff1a;Web界面 2 RAID 如果使用的软件已经在多个硬件设备…...

MySQL 8.0详细安装配置教程

一. 前言 MySQL是目前最为流行的开源数据库产品&#xff0c;是完全网络化跨平台的关系型数据库系统。它起初是由瑞典MySQLAB公司开发&#xff0c;后来被Oracle公司收购&#xff0c;目前属于Oracle公司。因为开源&#xff0c;所以任何人都能从官网免费下载MySQL软件&#xff0c…...

pytest 入门

1,安装pytest 打开终端或命令提示符窗口,在终端中运行以下命令来安装pytest: pip install pytestpip install -i https://pypi.tuna.tsinghua.edu.cn/simple pytest 确保您的系统上已经安装了Python。您可以在终端中运行以下命令来检查Python的安装情况: pytest --version…...

分布式缓存数据一致性-解决方案

如果是用户维度&#xff0c;并发几率小&#xff08;用户修改订单&#xff09;。不需要考虑一致性问题&#xff0c;缓存数据加上过期时间&#xff0c;每隔一段时间出发读数据&#xff0c;主动更新缓存即可。&#xff08;缓存过期删除数据&#xff0c;触发读请求主动更新&#xf…...

Java设计模式-享元模式

享元模式 1.享元模式含义 享元模式&#xff0c;运用共享技术有效地支持大量细粒度的对象。 其实享元模式很好理解&#xff0c;就是共享元数据的意思。比如一个小狗类对象&#xff0c;里面的属性有头&#xff0c;耳朵&#xff0c;眼睛&#xff0c;毛色这几个属性&#xff0c;…...

idea模块的pom.xml被划横线,不识别的解决办法

目录 问题&#xff1a; 解决办法&#xff1a; 1.打开设置 2. 取消勾选 3.点击确认 4.解决 问题提出&#xff1a; 写shi山的过程中&#xff0c;给模块取错名字了&#xff0c;改名的时候不知道点到了什么&#xff0c;一个模块的pom.xml变成灰色了&#xff0…...

【Java外部函数性能优化黄金法则】:20年JVM专家亲授JNI/FFM调优的7大致命误区与3步极速修复方案

第一章&#xff1a;Java外部函数优化的演进脉络与性能本质Java平台对外部函数调用&#xff08;Foreign Function & Memory API&#xff0c;即JEP 454/464/471/472&#xff09;的演进&#xff0c;标志着JVM从“纯Java世界”迈向系统级互操作的新纪元。其性能本质并非单纯降低…...

HsMod:炉石传说个性化增强工具 玩家的全方位游戏体验优化方案

HsMod&#xff1a;炉石传说个性化增强工具 玩家的全方位游戏体验优化方案 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 你是否曾因炉石传说中繁琐的操作流程而感到沮丧&#xff1f;是否希望拥有…...

零基础入门AI开发:在快马平台亲手制作你的第一个口播智能体

最近在尝试入门AI开发&#xff0c;发现用InsCode(快马)平台做"旗博士口播智能体"特别适合零基础选手。这个项目不需要自己从头写代码&#xff0c;但能完整走通AI应用开发全流程&#xff0c;分享下我的学习笔记&#xff1a; 项目整体结构 整个项目分三部分&#xff1a…...

如何在Charmbracelet Log中实现结构化日志记录的5个技巧

如何在Charmbracelet Log中实现结构化日志记录的5个技巧 【免费下载链接】log A minimal, colorful Go logging library &#x1fab5; 项目地址: https://gitcode.com/gh_mirrors/log1/log Charmbracelet Log是一款轻量级且色彩丰富的Go日志库&#xff0c;支持结构化日…...

OFA-COCO蒸馏版部署教程:Windows WSL2环境下PyTorch服务调试全流程

OFA-COCO蒸馏版部署教程&#xff1a;Windows WSL2环境下PyTorch服务调试全流程 1. 引言&#xff1a;为什么选择OFA图像描述模型&#xff1f; 你有没有遇到过这样的场景&#xff1f;手头有一堆图片&#xff0c;需要为它们配上文字说明&#xff0c;一张张手动写描述&#xff0c…...

500套帐篷发往西非:我们凭什么拿下这单?

一句吐槽&#xff0c;让我们抓住了机会年初&#xff0c;天津京路发科技收到一封西非询盘&#xff1a;500套支架帐篷&#xff0c;用于安置点。客户顺带吐槽了一句&#xff1a;“之前的帐篷&#xff0c;没撑过上一个雨季。”我们懂了——价格不是关键&#xff0c;耐造才是。先看气…...

实战指南:基于快马AI生成可部署的、支持多游戏与数据库的账号管理应用

今天想和大家分享一个实战项目&#xff1a;用Python开发一个支持多游戏的账号管理器&#xff08;俗称"lv上号器"&#xff09;。这个工具特别适合游戏多开玩家&#xff0c;能安全存储不同游戏的账号信息&#xff0c;还能一键登录不同游戏客户端。 项目需求分析 首先明…...

如何三步搞定iOS微信聊天记录完整导出:隐私保护与数据备份终极指南

如何三步搞定iOS微信聊天记录完整导出&#xff1a;隐私保护与数据备份终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法永久保存重要微信对话而烦恼吗&…...

从理论到实践:基于状态观测器的闭环系统设计与MATLAB仿真

1. 当状态看不见时&#xff0c;我们如何控制一个系统&#xff1f; 想象一下你在驾驶一辆汽车&#xff0c;但仪表盘全部失灵——看不到车速、转速、油量&#xff0c;甚至连方向盘转角都不知道。这时候如果要保持车道&#xff0c;你会怎么做&#xff1f;这就是控制工程中经典的状…...

药物研发新思路:共价对接工具AutoDock4实战指南(附避坑技巧)

药物研发新思路&#xff1a;共价对接工具AutoDock4实战指南&#xff08;附避坑技巧&#xff09; 在当今药物研发领域&#xff0c;共价抑制剂因其独特的作用机制和显著的治疗优势正受到前所未有的关注。与传统非共价药物相比&#xff0c;这类分子能与靶蛋白形成稳定的共价键&…...