Spring 定時之 @Scheduled,你真正了解嘛?


眾所周知,@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;
     }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM