Module  java.base
软件包  java.util.concurrent

Interface ScheduledExecutorService

  • All Superinterfaces:
    ExecutorExecutorService
    所有已知实现类:
    ScheduledThreadPoolExecutor


    public interface ScheduledExecutorService
    extends ExecutorService
    一个ExecutorService ,可以调度命令在给定的延迟之后运行,或定期执行。

    schedule方法创建具有各种延迟的任务,并返回可用于取消或检查执行的任务对象。 scheduleAtFixedRatescheduleWithFixedDelay方法创建和执行定期运行的任务,直到取消。

    使用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
    • 方法详细信息

      • 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 - 如果延迟小于或等于零