返回介绍

java.util.concurrent 接口 ScheduledExecutorService

发布于 2019-10-04 09:51:45 字数 7494 浏览 816 评论 0 收藏 0

所有超级接口:
Executor, ExecutorService
所有已知实现类:
ScheduledThreadPoolExecutor

public interface ScheduledExecutorService
extends ExecutorService
 

一个 ExecutorService ,可安排在给定的延迟后运行或定期执行的命令。

schedule 方法使用各种延迟创建任务,并返回一个可用于取消或检查执行的任务对象。 scheduleAtFixedRatescheduleWithFixedDelay 方法创建并执行某些在取消前一直定期运行的任务。

Executor.execute(java.lang.Runnable)ExecutorServicesubmit 方法所提交的命令,通过所请求的 0 延迟进行安排。 schedule 方法中允许出现 0 和负数延迟(但不是周期),并将这些视为一种立即执行的请求。

所有的 schedule 方法都接受相对 延迟和周期作为参数,而不是绝对的时间或日期。将以 Date 所表示的绝对时间转换成要求的形式很容易。例如,要安排在某个以后的 日期 运行,可以使用: schedule(task, date.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS) 。但是要注意,由于网络时间同步协议、时钟漂移或其他因素的存在,因此相对延迟的期满日期不必与启用任务的当前 Date 相符。

Executors 类为此包中所提供的 ScheduledExecutorService 实现提供了便捷的工厂方法。

用法示例

以下是一个带方法的类,它设置了 ScheduledExecutorService ,在 1 小时内每 10 秒钟蜂鸣一次:

 import static java.util.concurrent.TimeUnit.*;
 class BeeperControl {
    private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

    public void beepForAnHour() {
        final Runnable beeper = new Runnable() {
                public void run() { System.out.println("beep"); }
            };
        final ScheduledFuture<?> beeperHandle = 
            scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
        scheduler.schedule(new Runnable() {
                public void run() { beeperHandle.cancel(true); }
            }, 60 * 60, SECONDS);
    }
 }
从以下版本开始:
1.5

方法摘要
<V> ScheduledFuture<V>
schedule(Callable<V>callable, longdelay, TimeUnitunit)

创建并执行在给定延迟后启用的 ScheduledFuture。

ScheduledFuture<?>schedule(Runnablecommand, longdelay, TimeUnitunit)

创建并执行在给定延迟后启用的一次性操作。

ScheduledFuture<?>scheduleAtFixedRate(Runnablecommand, longinitialDelay, longperiod, TimeUnitunit)

创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。

ScheduledFuture<?>scheduleWithFixedDelay(Runnablecommand, longinitialDelay, longdelay, TimeUnitunit)

创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。

从接口 java.util.concurrent.ExecutorService 继承的方法
awaitTermination, invokeAll, invokeAll, invokeAny, invokeAny, isShutdown, isTerminated, shutdown, shutdownNow, submit, submit, submit
从接口 java.util.concurrent.Executor 继承的方法
execute

方法详细信息

schedule

ScheduledFuture<?> schedule(Runnablecommand,
                            longdelay,
                            TimeUnitunit)
创建并执行在给定延迟后启用的一次性操作。
参数:
command - 要执行的任务。
delay - 从现在开始延迟执行的时间。
unit - 延迟参数的时间单位。
返回:
表示挂起任务完成的 Future,并且其 get() 方法在完成后将返回 null
抛出:
RejectedExecutionException - 如果无法安排执行该任务。
NullPointerException - 如果 command 为 null。

schedule

<V> ScheduledFuture<V> schedule(Callable<V>callable,
                                longdelay,
                                TimeUnitunit)
创建并执行在给定延迟后启用的 ScheduledFuture。
参数:
callable - 要执行的功能。
delay - 从现在开始延迟执行的时间。
unit - 延迟参数的时间单位。
返回:
可用于提取结果或取消的 ScheduledFuture。
抛出:
RejectedExecutionException - 如果无法安排执行该任务。
NullPointerException - 如果 callable 为 null。

scheduleAtFixedRate

ScheduledFuture<?> scheduleAtFixedRate(Runnablecommand,
                                       longinitialDelay,
                                       longperiod,
                                       TimeUnitunit)
创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。如果任务的任一执行遇到异常,都会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。
参数:
command - 要执行的任务。
initialDelay - 首次执行的延迟时间。
period - 连续执行之间的周期。
unit - initialDelay 和 period 参数的时间单位。
返回:
表示挂起任务完成的 Future,并且其 get() 方法在取消后将抛出异常。
抛出:
RejectedExecutionException - 如果无法安排执行该任务。
NullPointerException - 如果 command 为 null。
IllegalArgumentException - 如果 period 小于或等于 0。

scheduleWithFixedDelay

ScheduledFuture<?> scheduleWithFixedDelay(Runnablecommand,
                                          longinitialDelay,
                                          longdelay,
                                          TimeUnitunit)
创建并执行一个在给定初始延迟后首次启用的定期操作,随后,在每一次执行终止和下一次执行开始之间都存在给定的延迟。如果任务的任一执行遇到异常,就会取消后续执行。否则,只能通过执行程序的取消或终止方法来终止该任务。
参数:
command - 要执行的任务。
initialDelay - 首次执行的延迟时间。
delay - 一次执行终止和下一次执行开始之间的延迟。
unit - initialDelay 和 delay 参数的时间单位。
返回:
表示挂起任务完成的 Future,并且其 get() 方法在取消后将抛出异常。
抛出:
RejectedExecutionException - 如果无法安排执行该任务。
NullPointerException - 如果 command 为 null。
IllegalArgumentException - 如果 delay 小于或等于 0。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文