2016-08-09 39 views
7

我正在執行使用彈簧的計劃任務,我看到有2個類型的配置時間,計劃再次從最新的作品。這兩個配置之間有什麼不同。時間表中的固定費率和固定延遲有什麼區別?

@Scheduled(fixedDelay = 5000) 
    public void doJobDelay() { 
     // do anything 
    } 
    @Scheduled(fixedRate = 5000) 
    public void doJobRate() { 
     // do anything 
    } 

回答

12
  • 固定利率:讓春天的定期運行任務,即使 一次調用可能仍在運行。
  • fixedDelay:專門控制上次執行完成時的下一個執行時間。

    @Scheduled(FIXEDDELAY = 5000) 公共無效updateEmployeeInventory(){ 的System.out.println( 「員工庫存將被更新一次,只有最後一次更新完成」); /** * 添加您的計劃作業的邏輯在這裏 * /}

    @Scheduled(固定利率= 5000) 公共無效updateEmployeeInventory(){ 的System.out.println(「員工庫存將被更新無論是否已完成,每隔5秒鐘更新一次已經注視「); /** * 這裏添加* / 安排的作業邏輯}

+1

在每個方法中我使用** Thread.sleep(5000)**來等待5s,但是我不知道看看有什麼不同 – Adam

+0

完全一樣,我相信@ nikhil7610解釋正確 – ottercoder

0

固定延遲:特別控制下一執行時間,當最後執行完畢。

固定比率:即使最後一次調用仍在運行,Spring也會定期運行該任務。

2

「fixedRate」:在開始下一次執行之前,從上次執行的開始等待X毫秒。如果當前執行超過'fixedRate'時間間隔,則下一個執行將排隊,但只有下一個執行。它不會產生一系列排隊執行

private static int i = 0; 

@Scheduled(initialDelay=1000, fixedRate=1000) 
public void testScheduling() throws InterruptedException { 
    System.out.println("Started : "+ ++i); 
    Thread.sleep(4000); 
    System.out.println("Finished : "+ i); 
} 

輸出:
發起者:1
完成:1 // 4秒後
發起者:2 //立即W/O等待1秒中規定固定速率
表面處理:2 // 4秒後

「FIXEDDELAY」:等待來自先前執行的結束X米利斯開始下一次執行之前。無論當前執行的時間多少,下一次執行都是在添加「fixedDelay」間隔以結束當前執行時間之後開始的。它不會排隊下一次執行。

private static int i = 0; 

@Scheduled(initialDelay=1000, fixedRate=1000) 
public void testScheduling() throws InterruptedException { 
    System.out.println("Started : "+ ++i); 
    Thread.sleep(4000); 
    System.out.println("Finished : "+ i); 
} 

輸出:
發起者:1
完成:1 // 4秒後
發起者:1秒2個//等待如FIXEDDELAY指定
表面處理:2 4秒後
// 發起者:3 // 1秒後

4

固定利率:它是用來在運行每n磨作業方法iseconds。這項工作是否已經完成了之前的任務並不重要。

fixedDelay:它用於按任務之間等待時間給定n毫秒的順序運行作業方法。

當使用「固定利率」:如果沒有預料到超過內存的大小和線程池 固定利率是合適的。如果傳入的任務不完成快速,它可能最終與「內存異常」

當使用「FIXEDDELAY」: 如果每一個運行的任務是彼此相關,他們需要等待在前一個結束之前,fixedRate是合適的。如果fixedDelay時間是仔細設置的,它也會讓正在運行的線程有足夠的時間在新任務開始前完成工作

相關問題