排程任務在延遲或重複之後的固定時間執行

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 被取消,或者其中一個任務遇到異常。