ScheduledExecutorService方法scheduleAtFixedRate与scheduleWithFixedDelay的区别

时间:2022-12-11 17:50:57

先看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时间过去后,立即执行下一个任务。不会出现并行执行任务

scheduleAtFixedRate执行任务图

ScheduledExecutorService方法scheduleAtFixedRate与scheduleWithFixedDelay的区别


scheduleWithFixedDelay执行任务图

ScheduledExecutorService方法scheduleAtFixedRate与scheduleWithFixedDelay的区别
ScheduledExecutorService方法scheduleAtFixedRate与scheduleWithFixedDelay的区别

图来自:https://blog.csdn.net/jianghuiyun/article/details/96151861