spring boot下,@Scheduled定时任务的线程执行策略(配置Scheduled定时任务多线程池执行的方法)

本文探讨了Spring Boot中@Scheduled定时任务默认的单线程执行策略及其潜在问题。在多任务并发执行的需求下,由于所有任务都在同一个线程执行,可能导致效率降低。为了解决这个问题,文章介绍了如何通过配置自定义线程池,使每个定时任务能够在独立的线程中运行,提高执行效率。通过设置ScheduledTaskRegistrar的taskScheduler,实现了多线程执行定时任务的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


spring boot中,开启定时任务只需要两步:

  1. 配置启动类
  2. 在需要定时的方法上添加@Scheduled注解

这里就不再赘述,有需要了解具体步骤,请移步spring boot 使用 @Scheduled 执行定时任务,今天主要讨论的,是spring boot定时任务的线程问题。

在需求多样且复杂的实际业务场景中,对定时执行的方法要求也多有不同;其中有一些方法,可能需要每隔5-10秒执行一次,这类方法执行次数频繁,执行操作复杂。类似这样方法,我们期望的是,每一个不同的定时任务,spring单独开启一个线程来执行,以确保各个定时执行的效率。但,spring真的是这样的吗?
先说结论:所有任务都是在同一个线程池中的同一个线程来完成的。

一,@Scheduled默认以单线程执行所有任务

1.前期准备

ScheduledTaskTest :任务类
如下,我在ScheduledTaskTest 类中,添加了四个每五秒执行一次的定时任务。其中他们的执行时间有一些小不同,执行时属于依次执行。方便浏览日志。

@Component
public class ScheduledTaskTest {
   
   
    private static final Logger LOGGER = LoggerFactory.getLogger(ScheduledTaskTest.class);

    private int taskCount1 = 1;
    private int taskCount2 = 1;
    private int taskCount3 = 1;
    private int taskCount4 = 1;

    @Scheduled(cron = "0/5 * * * * ?")
    public void setTaskCount1() {
   
   
        LOGGER.info("(╯‵□′)╯︵┻━┻  setTaskCount_1: 第" + taskCount1++ +"次执行方法");
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值