1.兩個注解同時存在:@Async表示異步執行,@Scheduled(fixedDelay=1000*2*1)表示兩次任務的間隔時間為2秒,當線程異步執行且用時較長時,任務會一直開啟線程而導致fixedDelay失效,此時fixedDelay和fixedRate都是表示兩個線程間隔開啟的時間。即不管鎖沒鎖住,都會到時間嘗試開啟。
2.無@Async,用同一個線程去執行任務,且執行時間只跟任務時間有關,只有任務完成后,才會執行下一次操作,如果任務時間小於fixedRate時間,會等到fixedRate的時間再開啟下一個。如果任務時間大於fixedRate時間,則以任務時間為准。fixedDelay會影響兩次任務的間隔時間。
3.增加了@SchedulerLock鎖之后lockAtMostForString的時間,若任務執行時間小於最大時間lockArMostForString,則在任務結束后間隔fixedDelay時間后開啟下一個線程。若線程任務時間大於lockAtMostForString時間,則會導致任務未執行完畢又開啟下一個線程任務。lockAtLeastForString表示最少鎖定多長時間。