当前位置:   article > 正文

Springboot中上一个定时任务没执行完,是否会影响下一个定时任务执行分析及结论_定时任务执行时间超过间隔

定时任务执行时间超过间隔

本文将用测试代码验证:定时任务阻塞问题

在springboot中使用定时任务的步骤

  1. 在启动类上加上注解:@EnableScheduling,表示允许定时任务执行

  2. 定时任务需要在类上加上@Component或者其衍生类(Controller、Service等),用于纳入Spring容器管理。

  3. 在需要定时任务方法上增加注解@Scheduled,注解的参数是定时任务执行时机

首先需要知道:定时任务默认是单线程的。所以默认情况下,上一个定时任务没有执行完,下一个定时任务是不会开始的。

单线程定时任务

1. 示例1,最简单的例子

// 示例代码:最简单的定时任务
@Scheduled(cron = "0/1 * * * * ?")
public void test1() {
    // 每秒执行一次
    System.out.println("scheduler1 执行: " + Thread.currentThread() + "-" + DateTime.now());
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如上方法,定时任务是每隔1s触发一次。

2. 示例2,验证定时任务阻塞

但是如果定时任务执行时间超过1s,下一个定时任务会被阻塞,直到上一个定时任务被执行完。

// 示例代码:验证定时任务阻塞问题
@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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/83606
推荐阅读
相关标签
  

闽ICP备14008679号