1. 程式人生 > 其它 >理解Spring定時任務@Scheduled的兩個屬性fixedRate和fixedDelay

理解Spring定時任務@Scheduled的兩個屬性fixedRate和fixedDelay

fixedRate和fixedDelay都是表示任務執行的間隔時間
fixedRate和fixedDelay的區別:
fixedDelay非常好理解,它的間隔時間是根據上次的任務結束的時候開始計時的。比如一個方法上設定了fixedDelay=5*1000,那麼當該方法某一次執行結束後,開始計算時間,當時間達到5秒,就開始再次執行該方法。
fixedRate理解起來比較麻煩,它的間隔時間是根據上次任務開始的時候計時的。比如當方法上設定了fiexdRate=5*1000,該執行該方法所花的時間是2秒,那麼3秒後就會再次執行該方法。
但是這裡有個坑,當任務執行時長超過設定的間隔時長,那會是什麼結果呢。打個比方,比如一個任務本來只需要花2秒就能執行完成,我所設定的fixedRate=5*1000,但是因為網路問題導致這個任務花了7秒才執行完成。當任務開始時Spring就會給這個任務計時,5秒鐘時候Spring就會再次呼叫這個任務,可是發現原來的任務還在執行,這個時候第二個任務就阻塞了(這裡只考慮單執行緒的情況下,多執行緒後面再講),甚至如果第一個任務花費的時間過長,還可能會使第三第四個任務被阻塞。被阻塞的任務就像排隊的人一樣,一旦前一個任務沒了,它就立馬執行。


下面用程式碼來具體驗證一下。