排程任務在延遲或重複之後的固定時間執行
ScheduledExecutorService
類提供了一種以多種方式排程單個或重複任務的方法。以下程式碼示例假定 pool
已宣告並初始化如下:
ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
除了普通的 ExecutorService
方法之外,ScheduledExecutorService
API 還增加了 4 種方法來安排任務並返回 ScheduledFuture
物件。後者可用於檢索結果(在某些情況下)和取消任務。
在固定延遲後啟動任務
以下示例計劃在十分鐘後啟動任務。
ScheduledFuture<Integer> future = pool.schedule(new Callable<>() {
@Override public Integer call() {
// do something
return 42;
}
},
10, TimeUnit.MINUTES);
以固定費率啟動任務
以下示例將任務計劃為在十分鐘後開始,然後以每一分鐘一次的速率重複。
ScheduledFuture<?> future = pool.scheduleAtFixedRate(new Runnable() {
@Override public void run() {
// do something
}
},
10, 1, TimeUnit.MINUTES);
任務執行將根據計劃繼續,直到 pool
關閉,future
被取消,或者其中一個任務遇到異常。
保證給定 scheduledAtFixedRate
呼叫所安排的任務不會在時間上重疊。如果任務花費的時間超過規定的時間段,則下一個和後續的任務執行可能會延遲。
以固定延遲啟動任務
以下示例將任務計劃為在十分鐘後啟動,然後在一個任務結束和下一個任務結束之間重複延遲一分鐘。
ScheduledFuture<?> future = pool.scheduleWithFixedDelay(new Runnable() {
@Override public void run() {
// do something
}
},
10, 1, TimeUnit.MINUTES);
任務執行將根據計劃繼續,直到 pool
關閉,future
被取消,或者其中一個任務遇到異常。