fixedDelay 和 fixedRate的区别

在Spring Boot中,@Scheduled注解可以用来创建定时任务。在@Scheduled注解中,有两个比较常用的属性:fixedDelay和fixedRate,它们都可以用来设置定时任务的执行时间间隔。

fixedDelay:表示上一个任务执行结束后隔一段时间再开始下一次任务。即当任务执行完毕后,会等待一段时间,然后再执行下一次任务。如果上一个任务执行的时间很长,那么下一个任务会延迟执行。
fixedRate:表示以固定的频率执行任务。即无论上一个任务执行的时间长短,下一次任务都会在固定的时间间隔后开始执行。如果上一个任务执行的时间很长,那么下一个任务也会按照固定的时间间隔开始执行,可能会导致并发执行多个任务。
因此,fixedDelay适合任务执行时间较长的场景,而fixedRate适合任务执行时间较短的场景。

下面是两者使用的示例:

@Component
public class ScheduleTask {
    // fixedDelay方式
    @Scheduled(fixedDelay = 5000)
    public void task1() {
        System.out.println("task1每隔5秒执行一次");
    }

    // fixedRate方式
    @Scheduled(fixedRate = 5000)
    public void task2() {
        System.out.println("task2每隔5秒执行一次");
    }
}

在上面的代码中,task1和task2都是每隔5秒执行一次。但是,如果task1的执行时间超过5秒,那么下一个任务就会在上一个任务结束后等待一段时间再开始执行;而task2无论上一个任务执行的时间长短,下一次任务都是在固定的时间间隔后开始执行。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容