ScheduredExecutorService是一個ExecutorService,但是可安排在給定的延時後執行或定期執行的命令。schedure方法使用各種延遲創建任務並返回一個可用於取消或檢查執行的任務的ScheduredFuture對象。
schedureAtFixedRate和schedureWithFixedDelay可創建在取消前一直定期執行的命令。用Executor.execute(runnable)和ExecutorService.submit所提交的命令通過所請求的延時進行安排。schedure方法允許出現0和負數延遲(但不是週期),並將這些視爲立即執行的。
schedure接受相對延時和週期作爲參數,不是絕對的時間和日期。如果要在某個date執行,應做轉換:
schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)。
下面舉個例子,在一個小時內,沒10s蜂鳴一次:
class BeeperControl {
private final ScheduredExecutorService executor = Executors.newScheduredThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable(){
public void run(){
//蜂鳴
}
};
//10s後執行一次,執行完後再隔10s循環
final ScheduredFuture beeperHandler = executor.schedureAtFixedRate(beeper,10,10,SECONDS);
//1小時後取消循環
executor.schedure(new Runnable(){
public void run() { beeperHandler.cancel(true);} , 60*60 , SECONDS);
}
}