@Schedule中关于fixedDelay和fixedRate的区别

先介绍下Schedule的使用方法
1.首先新建使用Springboot的Maven项目,引入相关引用如下在pom.xml里添加如下:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
2.新建MySchedule的Java文件,用@Component来注释该类,定时任务用@Scheduled来注释如下:

@Scheduled(fixedRate=2000)
    public void fixedRate(){
        System.out.println("fixedRate:"+new Date());
    }

该代码会定时2秒钟执行一次在这里插入代码片,执行结果如下
在这里插入图片描述
但是@Scheduled中还有一种属性fixedDelay,两者有什么区别,区别就是如果执行任务中有阻塞的情况,fixedDelay执行间隔会加上阻塞的时间代码如下:

 @Scheduled(fixedDelay=2000)
    public void fixedDelay(){
        try
        {
            Thread.currentThread().sleep(1000);//毫秒
        }
        catch(Exception e){}
        System.out.println("fixedDelay:"+new Date());
    }

执行结果如下在这里插入图片描述
可以看出后一次执行的时间是fixedDelay的时间加阻塞时间;
而fixedRate则是按其规定的时间来执行的,犹如时刻表一般,当阻塞结束后按时刻表来执行,代码如下:

 @Scheduled(fixedRate=2000)
    public void fixedRate(){
    try
        {
            Thread.currentThread().sleep(1000);//毫秒
        }
        catch(Exception e){}
        System.out.println("fixedRate:"+new Date());
    }

执行结果如下在这里插入图片描述
图中可以看到,执行结果中时间间隔为fixedRate定的时间间隔

总结来说,fixedRate下一次执行时间是本次开始时间加间隔时间;而fixedDelay下一次执行时间是本次结束时间加间隔时间

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值