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

10_Spring Boot 中的 @Scheduled 注解是单线程还是多线程?同步还是异步?

🔟 10_Spring Boot 中的 @Scheduled 注解是单线程还是多线程?同步还是异步?

✅ 结论先行

Spring Boot 中的 @Scheduled 注解默认是 单线程且同步执行 的。

这意味着:
如果你定义了多个使用 @Scheduled 注解的定时任务,它们会共用一个线程顺序执行。一旦其中某个任务执行时间较长或发生异常,可能会阻塞其他定时任务的正常调度


✅ 如何解决:将定时任务配置为多线程执行

为了让定时任务支持并发执行(多线程),可以采用以下三种方式之一:


✅ 方式一:定义 TaskScheduler Bean

@Configuration
public class ScheduleConfig {@Beanpublic TaskScheduler taskScheduler() {ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();// 设置线程池大小(建议:CPU 核心数 * 2)scheduler.setPoolSize(Runtime.getRuntime().availableProcessors() * 2);return scheduler;}}

✅ 方式二:实现 SchedulingConfigurer 接口配置线程池

@Configuration
public class ScheduleConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors() * 2));}
}

✅ 方式三:通过配置文件开启多线程支持(Spring Boot 2.1+)

spring:task:scheduling:pool:size: 8  # 设置定时任务线程池大小

⚠️ 注意:该方式依赖 Spring Boot 的自动配置机制,适用于较新版本。


✅ 如果希望定时任务异步执行怎么办?

多线程 ≠ 异步。如果你希望某个定时任务在调度后立即返回,由独立线程异步执行,可以启用 Spring 的异步机制:

步骤一:在启动类上添加 @EnableAsync 注解

@SpringBootApplication
@EnableAsync
public class Application {// ...
}

步骤二:在定时任务方法上添加 @Async 注解

@Scheduled(cron = "0 */1 * * * ?")
@Async
public void runTask() {// 异步执行的任务逻辑
}

✅ 总结

问题默认行为推荐配置方式
是否单线程执行?是(共用一个线程)使用线程池配置为多线程
是否同步执行?是(方法阻塞)使用 @Async 异步注解
是否可以自定义线程数?配置 TaskScheduler 或 YAML 文件
http://www.dtcms.com/a/295857.html

相关文章:

  • 基于深度学习的肺癌肿瘤细胞图像识别与分类系统
  • 技术赋能多元探索:我的技术成长与行业洞察
  • 解决 WSL 中无法访问 registry-1.docker.io/v2/,无法用 docker 拉取 image
  • 新能源电池厂自动化应用:Modbus TCP转DeviceNet实践
  • IDM下载失败全面排查指南
  • 医疗设备自动化升级:Modbus TCP与DeviceNet的协议协同实践
  • DPO:大语言模型偏好学习的高效方案
  • Python 程序设计讲义(15):Python 的数据运算——位运算
  • Opentrons 模块化平台与AI技术助力智能移液创新,赋能AAW™自动化工作站
  • 深入探索Amazon SQS:构建弹性微服务与无服务器应用的秘密武器
  • 如何在Ubuntu系统下创建桌面快捷方式
  • Vue 3 项目性能优化指南
  • rk3588开发板使用硬件编码处理视频
  • 如何在 Windows 上安装 MongoDB 及常见问题
  • AI总结视频以及谷歌浏览器插件安装步骤
  • RAGFlow:检索增强生成技术的高效实现与深度探索
  • Day02_C++编程
  • 基于U-Net的结冰检测系统实现
  • C11补充
  • SGLang + 分布式推理部署DeepSeek671B满血版
  • 数据结构-5(二叉树)
  • pytorch-geometric包(torch_scatter、torch_sparse、torch_cluster)
  • 服务器带宽具体是指什么意思?
  • PyTorch中神经网络的模型构建
  • 钉钉DingTalk完整版下载离线安装包2025
  • 【小董谈前端】【样式】 CSS与样式库:从实现工具到设计思维的跨越
  • ThinkPHP8集成RabbitMQ的完整案例实现
  • C# 方法执行超时策略
  • [Python] -进阶理解5- Python 模块与包的导入机制解析
  • uniapp中mp-html使用方法