调度任务在延迟或重复之后的固定时间运行
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
被取消,或者其中一个任务遇到异常。