0%

@Scheduled多个定时任务同时执行

结论

定时任务是单线程执行的,默认一个时间段只能执行一个定时任务

如果多个定时任务同时执行的话,那么会按照顺序执行

代码

在启动类中加上以下代码

1
2
3
4
5
6
7
8
//创建定时任务线程池
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
//线程池可根据实际情况调整
taskScheduler.setPoolSize(64);
return taskScheduler;
}

测试

用例一

一个Job,两个任务

task1每5s执行一次,每次执行耗时10s

task2每5s执行一次,每次执行耗时10s

代码

结果

用例二

两个Job,每个Job中各一个任务

task1每5s执行一次,每次执行耗时10s

task3每7s执行一次,每次执行耗时10s

代码

结果

用例三

一个Job,两个任务

task1每5s执行一次,每次执行耗时10s

task2每7s执行一次,每次执行耗时10s

代码

结果

另一种方案

使用@Async注解实现异步任务

注意:需启动类配合加上 @EnableAsync才会生效

同一个task也不会阻塞,不建议使用

代码

结果