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表示最少锁定多长时间。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM