-
- All Superinterfaces:
-
Executor
,ExecutorService
- 所有已知实现类:
-
ScheduledThreadPoolExecutor
public interface ScheduledExecutorService extends ExecutorService
一个ExecutorService
,可以调度命令在给定的延迟之后运行,或定期执行。schedule
方法创建具有各种延迟的任务,并返回可用于取消或检查执行的任务对象。scheduleAtFixedRate
和scheduleWithFixedDelay
方法创建和执行定期运行的任务,直到取消。使用
Executor.execute(Runnable)
和ExecutorService
submit
方法提交的命令以请求的延迟为零进行调度。 在schedule
方法中也允许零和负延迟(但不是周期),并被视为立即执行的请求。全部
schedule
方法接受相对延迟和句点作为参数,而不是绝对时间或日期。 将表示为Date
的绝对时间转换为所需形式是一件很简单的事情。 例如,要在一定的日期安排date
,可以使用:schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS)
。 然而,请注意,由于网络时间同步协议,时钟漂移或其他因素,相对延迟的到期与当前启用任务的Date
不一致。Executors
类为该包中提供的ScheduledExecutorService实现提供了方便的工厂方法。用法示例
这是一个类,其方法是将ScheduledExecutorService设置为每10秒钟发出一个小时的蜂鸣声:import static java.util.concurrent.TimeUnit.*; class BeeperControl { private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); public void beepForAnHour() { Runnable beeper = () -> System.out.println("beep"); ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS); Runnable canceller = () -> beeperHandle.cancel(true); scheduler.schedule(canceller, 1, HOURS); } }
- 从以下版本开始:
- 1.5
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 ScheduledFuture<?>
schedule(Runnable command, long delay, TimeUnit unit)
创建并执行在给定延迟后启用的单次操作。<V> ScheduledFuture<V>
schedule(Callable<V> callable, long delay, TimeUnit unit)
创建并执行在给定延迟后启用的ScheduledFuture。ScheduledFuture<?>
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
创建并执行在给定的初始延迟之后,随后以给定的时间段首先启用的周期性动作; 也就是说,执行将在initialDelay
之后开始,然后是initialDelay + period
,然后是initialDelay + 2 * period
,等等。ScheduledFuture<?>
scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
创建并执行在给定的初始延迟之后首先启用的定期动作,随后在一个执行的终止和下一个执行的开始之间给定的延迟。-
Methods inherited from interface java.util.concurrent.ExecutorService
awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated, shutdown, shutdownNow, submit, submit, submit
-
-
-
-
方法详细信息
-
schedule
ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
创建并执行在给定延迟后启用的单次操作。- 参数
-
command
- 要执行的任务 -
delay
- 从现在开始延迟执行的时间 -
unit
- 延迟参数的时间单位 - 结果
-
一个ScheduledFuture代表待完成的任务,其
get()
方法将在完成后返回null
- 异常
-
RejectedExecutionException
- 如果任务无法安排执行 -
NullPointerException
- 如果命令为空
-
schedule
<V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
创建并执行在给定延迟后启用的ScheduledFuture。- 参数类型
-
V
- 可调用结果的类型 - 参数
-
callable
- 执行的功能 -
delay
- 从现在开始延迟执行的时间 -
unit
- 延迟参数的时间单位 - 结果
- 一个可用于提取结果或取消的ScheduledFuture
- 异常
-
RejectedExecutionException
- 如果任务无法安排执行 -
NullPointerException
- 如果可调用为空
-
scheduleAtFixedRate
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
创建并执行在给定的初始延迟之后,随后以给定的时间段首先启用的周期性动作; 也就是说,执行将在initialDelay
之后开始,然后是initialDelay + period
,然后是initialDelay + 2 * period
,等等。任务执行的顺序无限期延续,直到出现以下异常完成之一:
- 任务是通过返回的未来是explicitly cancelled 。
- 执行者终止,也导致任务取消。
- 执行任务会引发异常。 在这种情况下,呼叫
get
将返回未来将抛出ExecutionException
。
isDone()
将返回true
。如果任务执行时间比其周期长,则后续执行可能会迟到,但不会同时执行。
- 参数
-
command
- 要执行的任务 -
initialDelay
- 延迟第一次执行的时间 -
period
- 连续执行之间的时期 -
unit
- initialDelay和period参数的时间单位 - 结果
-
一个ScheduledFuture表示一系列重复任务的等待完成。
未来的
get()
方法将永远不会正常返回,并且在任务取消或任务执行异常终止时将抛出异常。 - 异常
-
RejectedExecutionException
- 如果不能安排任务执行 -
NullPointerException
- 如果命令为空 -
IllegalArgumentException
- 如果周期小于或等于零
-
scheduleWithFixedDelay
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)
创建并执行在给定的初始延迟之后首先启用的定期动作,随后在一个执行的终止和下一个执行的开始之间给定的延迟。任务执行的顺序无限期延续,直到出现以下异常完成之一:
- 任务是通过返回的未来是explicitly cancelled 。
- 执行者终止,也导致任务取消。
- 执行任务会引发异常。 在这种情况下,呼叫
get
对未来的回报将会抛出ExecutionException
。
isDone()
对返回的未来将返回true
。- 参数
-
command
- 要执行的任务 -
initialDelay
- 延迟第一次执行的时间 -
delay
- 一个执行终止和下一个执行的开始之间的延迟 -
unit
- initialDelay和delay参数的时间单位 - 结果
-
一个ScheduledFuture表示一系列重复任务的等待完成。
未来的
get()
方法将永远不会正常返回,并且在任务取消或异常终止任务执行时将抛出异常。 - 异常
-
RejectedExecutionException
- 如果任务无法安排执行 -
NullPointerException
- 如果命令为空 -
IllegalArgumentException
- 如果延迟小于或等于零
-
-