我正在使用Spring ThreadPoolTaskScheduler每5分鐘執行一次未同步的方法。有時該方法的執行時間超過5分鐘。我試圖觀察這種情況下的行爲,並且在當前執行完成之前(即使5分鐘的時間間隔結束),該方法似乎不會再次執行。ThreadPoolScheduler間隔小於任務的執行時間
儘管這適合我想要完成的任務,但我想知道爲什麼第二個線程在5分鐘後不會產生,並行執行方法的時間超過5分鐘。起初我認爲這與默認的池大小有關。但是,即使我增加了池的大小,行爲仍然是一樣的。
我試圖深入到ThreadPoolScheduler代碼,它看起來在內部通過ThreadPoolExecutor運行任務。它是否被設計爲只運行一個線程,等待一個執行完成後再觸發另一個線程,即使間隔已經過去?
至於代碼這個來講我我做什麼 -
<task:scheduler id="scheduler" pool-size="1" />
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
executeThis(); // this takes more than 5 minutes sometime
}
}, 5*60*1000);
問候,
圖莎爾
正如我前面所說,我曾嘗試增加池大小,但似乎並未影響行爲。 – Tushar 2012-01-15 07:10:48