在使用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整分鐘是不命中的。