https://spring.io/guides/gs/scheduling-tasks/html
官方文檔詳細介紹了@Scheduled中fixedRate,fixedDelay,cron的用法java
fixedRate表明調用頻率,單位爲ms,若是調用頻率設爲5000ms,那麼當你第一次調用佔用2秒時等待3秒會第二次調用,當你第二次調用佔用5秒時結束會立馬第三次調用。spring
fixedDelay表明間隔時間,單位爲ms,即每次調用完成時間和下次調用都相隔5000ms。api
cron表達式,看官網文檔ide
設置延遲5秒時,執行時間爲3秒ui
@Scheduled(fixedDelay=5000) public void execute() throws InterruptedException { System.out.println("調用時間"+CommonTool.getNowDateStr()); Thread.sleep(3000); }
發現兩次開始調用時間爲8秒恰好爲執行時間+等待時間spa
設置延遲5秒,而且方法調用時間爲6秒時線程
@Scheduled(fixedDelay=5000) public void execute() throws InterruptedException { System.out.println("調用時間"+CommonTool.getNowDateStr()); Thread.sleep(6000); }
發現間隙爲11,也爲執行時間+等待時間code
設置延遲5秒時,執行時間爲3秒htm
發現間隔時間即爲5秒
設置延遲5秒,而且方法調用時間爲6秒時
發現調用間隔爲6秒,因而可知是單線程運行。
@Scheduled(cron="* * * * * *")
Thread.sleep(24*3600*1000);
schedule是單線程的,阻塞的,因此千萬不要長時間睡眠,會影響隊列裏其餘schedule的執行。若是想多個schedule同時進行能夠在xm裏面配置線程池