1. 程式人生 > >ScheduledThreadPoolExecutor線程池scheduleAtFixedRate和scheduleWithFixedDelay的區別

ScheduledThreadPoolExecutor線程池scheduleAtFixedRate和scheduleWithFixedDelay的區別

exec ole 線程 開始 nbsp ont eat 等待 就是

ScheduledFuture<?> result = executor.scheduleAtFixedRate(task,2, 5, TimeUnit.SECONDS);

在延遲2秒之後開始執行首個任務,之後每隔5秒執行一個任務,也就是固定間隔時間執行一次任務,而不是等到上個任務執行結束。

ScheduledFuture<?> result = executor.scheduleWithFixedDelay(task,2, 5, TimeUnit.SECONDS);

在延遲2秒後開始執行首個任務,總是等到每個任務執行完畢後再等待(間隔)5秒開始執行下個任務。

兩個方法的共同點:

如果間隔時間沒有單次任務的執行時間長,則一個任務執行結束,就立馬開始下一個任務。雖然不能明顯看出間隔時間,但是也不會使任務並發(交叉混合)執行,任務與任務之間一定是順序執行。

如果中途有任何線程發生異常,則任務終止。

ScheduledThreadPoolExecutor線程池scheduleAtFixedRate和scheduleWithFixedDelay的區別