@Scheduled同一时刻执行两个任务。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@Scheduled同一时刻执行两个任务。相关的知识,希望对你有一定的参考价值。

参考技术A 在运行的过程中我们在ScheduledTaskRegistrar这个类可以看到scheduleTasks() 这个方法,在执行过程中发现cronTasks为4 ,因为我的定时任务,一共写了4个;taskScheduler不为null,但是点开发现他的线程池大小只有1,所以说在执行循环的时候,他虽然放到了线程池中,但是线程池中只有一个,所以他还是相当于单线程。

之后我就寻找为什么线程池任务调度类的线程池数量为1,经过寻找,他是在项目启动的时候就注入到Spring里面了,通过getBean方法来获取的,所以我们找到这个类,他的默认poolSize就是1 。

生成一个这个类

@Scheduled注解各参数详解

参考技术A @Scheduled 由Spring定义,用于将方法设置为调度任务。如:方法每隔十秒钟被执行、方法在固定时间点被执行等
@Scheduled(fixedDelay = 1000) 上一个任务结束到下一个任务开始的时间间隔为固定的1秒,任务的执行总是要先等到上一个任务的执行结束
@Scheduled(fixedRate = 1000) 每间隔1秒钟就会执行任务(如果任务执行的时间超过1秒,则下一个任务在上一个任务结束之后立即执行)
@Scheduled(fixedDelay = 1000, initialDelay = 2000) 第一次执行的任务将会延迟2秒钟后才会启动
@Scheduled(cron = “0 15 10 15 * ?”) Cron表达式,每个月的15号上午10点15开始执行任务

在配置文件中配置任务调度的参数

以上是关于@Scheduled同一时刻执行两个任务。的主要内容,如果未能解决你的问题,请参考以下文章

Springboot解决使用@Scheduled创建任务时无法在同一时间执行多个任务的BUG

springboot + @scheduled 多任务并发

SpringBoot执行定时任务@Scheduled

并发与并行的区别

Java——线程

@Scheduled注解各参数详解