Spring中@Async和FixedDelay共同使用

Posted SuperTan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring中@Async和FixedDelay共同使用相关的知识,希望对你有一定的参考价值。

1.两个注解同时存在:@Async表示异步执行,@Scheduled(fixedDelay=1000*2*1)表示两次任务的间隔时间为2秒,当线程异步执行且用时较长时,任务会一直开启线程而导致fixedDelay失效,此时fixedDelay和fixedRate都是表示两个线程间隔开启的时间。即不管锁没锁住,都会到时间尝试开启。

2.无@Async,用同一个线程去执行任务,且执行时间只跟任务时间有关,只有任务完成后,才会执行下一次操作,如果任务时间小于fixedRate时间,会等到fixedRate的时间再开启下一个。如果任务时间大于fixedRate时间,则以任务时间为准。fixedDelay会影响两次任务的间隔时间。

3.增加了@SchedulerLock锁之后lockAtMostForString的时间,若任务执行时间小于最大时间lockArMostForString,则在任务结束后间隔fixedDelay时间后开启下一个线程。若线程任务时间大于lockAtMostForString时间,则会导致任务未执行完毕又开启下一个线程任务。lockAtLeastForString表示最少锁定多长时间。

以上是关于Spring中@Async和FixedDelay共同使用的主要内容,如果未能解决你的问题,请参考以下文章

理解 Spring 定时任务的 fixedRate 和 fixedDelay 的区别

Spring @Scheduled定时任务的fixedRate,fixedDelay,cron的作用和不同

Scheduling Tasks

定时任务的配置

Spring @Transactional 和 @Async

Spring @Scheduled 使用详解