前言
注:
大家好我是妈妈的好大儿,
笔者联系方式
QQ:3302254385
微信:yxc3302254385
交个朋友!
创作不易,三连十分感谢!!!
简介
定时任务是大家项目里比较常用的功能了,但是网上的教程比较杂也比较坑,只能说是基本使用没有问题,极端情况下也会出现很多的问题!!!学习就是不断循序渐进的不断深入,此篇不讨论定时任务的基本使用,主要是进阶,今天笔者将会以翻阅源码的方式层层递进给大家一一解析!!!
问题说明
先给大家看一个案列,SpirngBoot的定时任务默认是单线程执行的!!!
这里创建了3个定时任务,都是每隔5秒执行一次,每个任务在执行的期间都会休眠5秒!!查看结果我们会发现,只有当上一个定时任务执行完毕,才会执行下一个定时任务,所以它并不是并行执行的!!!如果我们有多个定时任务需要在同一刻执行,上一个任务没有执行完,就会下一个任务无法执行,导致出现服务上的问题!!!
/**
* @Author: Joker-CC
* @Date 2021/06/18 16:42
* @Description:
* @Version: 1.0
*/
@Component
public class TestJob {
@Scheduled(cron = "0/5 * * * * ?")
public void test1() throws InterruptedException {
System.out.println("执行任务1--->开始时间"+ SuperUtil.convertDateStr(System.currentTimeMillis()));
Thread.sleep(5000L);
System.out.println("执行任务1");
System.out.println("执行任务1--->结束时间"+ SuperUtil.convertDateStr(System.currentTimeMillis()));
}
@Scheduled(cron = "0/5 * * * * ?")
public void test2()throws InterruptedException {
System.out.println("执行任务2--->开始时间"+ SuperUtil.convertDateStr(System.currentTimeMillis()));
Thread.sleep(5000L);
System.out.println("执行任务2");
System