发布于 4年前

ScheduledExecutorService方法scheduleAtFixedRate与scheduleWithFixedDelay的区别

先看ScheduledExecutorService类的scheduleAtFixedRate()和scheduleWithFixedDelay()的方法签名。

scheduleAtFixedRate

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

scheduleWithFixedDelay

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

主要区别在第三个参数:

  • scheduleAtFixedRate的参数是period,它是以任务的开始时间计时,period时间过去后,如果任务已经执行完成,立即执行下一个任务。如果任务没有执行完,则需要等任务执行完毕后才能立即执行下一个任务。也就是说不会并行执行任务。
  • scheduleWithFixedDelay的参数是delay,是以任务结束时开始计时(计算延时),delay时间过去后,立即执行下一个任务。不会出现并行执行任务。
©2020 edoou.com   京ICP备16001874号-3