@schedule 中 cron 的 0 */1 * * * ? 和 0 0/1 * * * ? 的區別

在使用springboot中,經常會看到@schedule的使用,用於定時刷庫或者刪除數據

我的jdk版本是1.8,通過測試發現這兩個表達式    0 */1 * * * ?    和  0 0/1 * * * ?   是沒有區別的,他們的效果是一樣的

都是表示每隔1分鐘執行一次。看了下源碼,發現 setNumberHits的方法,在分鐘部分的時候調用

this.setNumberHits(this.minutes, fields[1], 0, 60); 其中minutes是BitSet類型,裏面是Long數組,當對上述兩個表示式進行解析的時候,發現是往BitSet中依次存入 0,1,2,3...59,60,所以每一次整數分鐘的時候,都會命中(setNumberHits 中的hit),那麼就會執行定時的任務了。

但是如果是 0 15/1 * * * ?  就會不同,15的話,會往裏面存入 15,16...59,60,就是前面的0到14整分鐘是不命中的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章