提示:本文内容属于学习记录
Springboot中上一个定时任务没执行完,是否会影响下一个定时任务执行分析及结论
前言
spring boot现在已经广泛应用了,应用过程中,或多或少都会遇到使用定时任务的情况,这篇文章简单介绍了第一个定时任务未执行完成的时候,是否会影响到下一个定时任务。
一、在springboot中使用定时任务的步骤
1、在启动类上加上注解:@EnableScheduling,表示允许定时任务执行
2、定时任务需要在类上加上@Component或者其衍生类(Controller、Service等),用于纳入Spring容器管理。
3、在需要定时任务方法上增加注解@Scheduled,注解的参数是定时任务执行时机
二、使用步骤
1.举个栗子(简单测试)
代码如下:
// 示例代码:验证定时任务阻塞问题
@Scheduled(cron = "0/1 * * * * ?")
public void test1() {
// 每秒执行一次
System.out.println("scheduler1 执行: " + Thread.currentThread() + "-" + DateTime.now());
try {
Thread.sleep(5*1000); // 5s
} catch (Exception e) {
System.out.println(e.toString());
}
}
总结
1、定时任务默认是单线程的。所以默认情况下,上一个定时任务没有执行完,下一个定时任务是不会开始的。
2、上一个任务没执行完,下一个任务会阻塞,待上一个执行完后,下一个定时任务不是立刻执行,而是需要等待1s(定时任务cron时间)才会执行。可以理解成是上一个任务执行完,才会开始计时。