ScheduledExecutorService的行为

时间:2018-01-03 06:46:13

标签: java multithreading

我一直想知道java中ScheduledExecutorService的具体情况。

让,

ScheduledExecutorService = new ScheduledThreadPoolExecutor(2);

service.scheduleAtFixedRate(new Runnable() {

 @Override
 public void run() {
      //Some task taking longer than schedule period to finish executing.
 }

},initialDelay,period,TimeUnit.SECONDS);

在这种情况下,假设时间是4秒。当调度程序在initialdelay之后开始执行时,任务将在(true)无限循环内被阻塞。 我的问题是,每4秒后,一项任务是否会被安排,无视上一轮任务的执行(未完成)?因为如果是这种情况,这个代码最终会在耗尽内存后崩溃。

非常感谢帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

来自scheduleAtFixedRate()的javadoc:

  

如果此任务的执行时间超过其周期,那么   后续处决可能会延迟,但不会同时执行   执行。

意味着任务将启动一次,但由于它永远不会完成,因此不会成为其他调用。你只是在池中浪费一个线程。

这同样适用于scheduleWithFixedDelay(),因为延迟是从上一次执行完成的时间算起的(因为它没有完成,所以不会发生下一次执行)。

相关问题