2017-07-17 75 views
0

我有一個在Spring中使用@Scheduled註釋標註的單個方法,計劃每2秒運行一次。使用Spring @Scheduled註釋運行的方法

@Schedule(fixedDelay=2000) 
public void myOperation() { 

    ... 
    Thread.sleep(1000); 
    ... 
    ... 
    Thread.sleep(1000); 
} 

但是,正在執行的undercing操作有sleep()以便延遲(針對特定用例)。現在,如果延遲加起來超過2秒,我想了解Spring是否會爲下一次預定操作啓動一個新線程?還是等到當前線程完成執行,然後啓動新線程?

此外,爲了防止線程數量大量爆炸,提供線程池大小以確保線程運行數量不會突然增加是安全的嗎?

回答

0

使用fixedDelay您指定的時間等待,因爲進程已經完成,直到再次啓動它。如果你的進程在兩者之間休眠,那並不重要。它需要完成到fixedDelay時間開始計數。所以,在這種情況下你將只有一個線程處於活動狀態。另一方面,如果要每兩秒鐘啓動一個進程,而不考慮前一個任務是否完成,則需要使用fixedRate。在這種情況下,如果您想確保同時運行的X進程不超過一個,則應該使用ThreadPoolTaskScheduler

,看一下文檔:

Annotation Type Scheduled

ThreadPoolTaskScheduler

-1

如果你想自己有計劃任務和控制線程,比它更好地使用ScheduledPoolExecutor

+0

你的答案應該是一個註釋 –

相關問題