眾所周知,@Scheduled 一個spring定時注解,讓定時如此簡單。
這里只想說明以下幾個問題 ↓
問題說明:
此定時器分為三種類型 ↓
(1)cron 到點執行
(2)fixedRate 間隔多久執行
(3)fixedDelay 上一次任務后多久執行
上面的概念很容易理解,通俗易記;但需要明白下面幾個場景:
- 使用cron時,如果設置為每隔1min執行一次,當上一次任務在一分鍾之內沒有執行完,那下一次任務會阻塞還是會執行?如果會執行什么時候執行,立即執行?
- 同理,當使用fixedRate時,如果設置為間隔1s執行一次,一個任務在一秒未執行完,下一次是否會阻塞,下一次執行是在什么時候?
- 多個任務同時使用cron時,他們之間的執行耗時會對其他任務有影響嘛?
- 多個任務三種模式混用,他們之間的耗時會對其他任務產生影響嘛?
問題答案1、2答案:
弄明白問題1、2只需要看下面這張圖-三種定時任務執行周期圖:

引用說明出處,此圖借鑒於 https://www.cnblogs.com/zouhong/p/11332126.html
問題3、4答案:
多個任務使用cron或者多任務混合使用三種定時類型,他們之間都是會互相影響的;eg:一個任務在執行,另一個任務即使到了執行時間也需等待前一個任務執行完再執行,因為@Scheduled 定時任務是單線程的,截圖為證:

所以如果多個任務之間不想互相影響,可以加大線程數,具體數量依任務數而定,Spring 1.5.8配置代碼如下(其他版本可能不同):
@Bean public TaskScheduler taskScheduler() { ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.setPoolSize(6); return taskScheduler; }
