美文网首页
30.ScheduledThreadPoolExecutor

30.ScheduledThreadPoolExecutor

作者: 段段小胖砸 | 来源:发表于2021-11-13 20:58 被阅读0次

    ScheduledThreadPoolExecutor实现了按时间调度来执行任务

    1.延迟执行任务

    public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
    public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)

    2.周期执行任务

    public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
    public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

    区别如下:
    AtFixedRate:按固定频率执行,与任务本身执行时间无关。但有个前提条件,任务执行时间必须小于间隔时间,例如间隔时间是5s,每5s执行一次任务,任务的执行时间必须小于5s。
    WithFixedDelay:按固定间隔执行,与任务本身执行时间有关。例如,任务本身执行时间是10s,间隔2s,则下一次开始执行的时间就是12s。

    3.延迟执行和周期性执行的原理

    ScheduledThreadPoolExecutor继承了ThreadPoolExecutor,这意味着其内部的数据结构和ThreadPoolExecutor是基本一样的延迟执行任务依靠的是DelayQueue。DelayQueue是 BlockingQueue的一种,其实现原理是二叉堆。

    而周期性执行任务是执行完一个任务之后,再把该任务扔回到任务队列中,如此就可以对一个任务反复执行。

    不过这里并没有使用DelayQueue,而是在ScheduledThreadPoolExecutor内部又实现了一个特定的DelayQueue。

    相关文章

      网友评论

          本文标题:30.ScheduledThreadPoolExecutor

          本文链接:https://www.haomeiwen.com/subject/nceozltx.html