Java的ScheduledExecutorService.scheduleAtFixedRate()的行为

Mic*_*ter 7 java concurrency scheduling

我有一个关于Java 6中ScheduledExecutorService上的scheduleAtFixedRate()方法的问题.

[ 编辑:1.6的Javadoc比1.5的更完整.见下面的评论]

鉴于:

  • ScheduledExecutorService由池中的N = 1个线程构成
  • 固定费率是T秒的一段时间
  • 没有初始延迟

在这种情况下会发生什么(在实时意义上,时间并不是绝对的):

  • 在时间T,服务启动Runnable任务,"task1"
  • 在时间2T,task1尚未完成,并且服务计划开始

服务是否保证可以执行以下任何操作?

  • (a)在2T,启动Runnable任务,"task2"(召回N = 1)
  • (b)阻止任务1完成
  • (c)跳过这一次并在3T再试一次
  • (d)行为不明确

或者是其他东西?如果N> 1,答案会改变吗?

yai*_*air 7

答案是

(b)阻止任务1完成

并且这与执行程序的线程数无关(task2甚至可能未提交).

医生说:

如果此任务的执行时间超过其周期,则后续执行可能会延迟,但不会同时执行.

(顺便说一句,由于没有初始延迟,"task1"将立即启动,因为docsed:

执行将在initialDelay之后开始

).