Scheduling Tasks

官方文檔

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

fixedDelay驗證

狀況一,程序執行時間小於延遲時間

設置延遲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

fixedRate驗證

狀況一,程序執行時間小於延遲時間

設置延遲5秒時,執行時間爲3秒htm

發現間隔時間即爲5秒 

狀況二,程序執行時間大於延遲時間

設置延遲5秒,而且方法調用時間爲6秒時

發現調用間隔爲6秒,因而可知是單線程運行。

定時任務當即執行

@Scheduled(cron="* * * * * *")
        Thread.sleep(24*3600*1000);

多個定時器同一時間觸發只有一個執行

schedule是單線程的,阻塞的,因此千萬不要長時間睡眠,會影響隊列裏其餘schedule的執行。若是想多個schedule同時進行能夠在xm裏面配置線程池

相關文章
相關標籤/搜索