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

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

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

posted on 2020-01-14 15:45  SuperTan  阅读(1476)  评论(0编辑  收藏  举报