JUC并发包

Executor家族-ScheduledExecutorServ

2020-12-22  本文已影响0人  于情于你
image.png

    ScheduledExecutorService可以安排任务在给定的延迟后运行,或定期执行

    该类的所有方法如下:


image.png
// 创建并在指定的延迟后执行Runnable任务
// 返回一个ScheduledFuture,代表任务的待完成状态,其 get()方法将在完成后返回null
public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit);

// 创建并在指定的延迟后执行Callable任务
// 返回ScheduledFuture,可用于提取结果或取消
public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit);

//  创建并执行一个周期性的操作
// 在initialDelay后第一次执行,之后每隔period执行一次
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit);

// 创建并执行一个周期性操作,该操作将在给定的初始延迟后首先启用,
// 然后在一个执行的终止与下一个执行的开始之间具有给定的延迟。
// 如果任务的任何执行遇到异常,则将禁止后续执行。否则,任务将仅通过取消或终止执行程序而终止。
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,
                                                   long initialDelay,
                                                   long delay,
                                                   TimeUnit unit);

scheduleAtFixedRate和scheduleWithFixedDelay有啥区别?

    scheduleAtFixedRate上一个任务开始的时间计时,一个period后,检测上一个任务是否执行完毕,如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完毕,则需要等上一个任务执行完毕后立即执行。
    注意:当前任务执行时间大于等于间隔时间,任务执行后立即执行下一次任务。相当于连续执行。
    如果任务的任何执行遇到异常,则将禁止后续执行。否则,任务将仅通过取消或终止执行程序而终止

    scheduleWithFixedDelay是“以固定的延时”执行,delay(延时)指的是一次执行终止和下一次执行开始之间的延迟。
    注意:不管当前任务执行时间大于、等于还是小于间隔时间,执行效果都是一样的。
    如果任务的任何执行遇到异常,则将禁止后续执行。否则,任务将仅通过取消或终止执行程序而终止

上一篇下一篇

猜你喜欢

热点阅读