ScheduledExecutorService的行为

问题描述 投票:-4回答:1

我一直想知道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秒后,一项任务是否会被安排,无视上一轮任务的执行(未完成)?因为如果是这种情况,这个代码最终会在耗尽内存后崩溃。

感谢帮助。

谢谢。

java multithreading
1个回答
1
投票

来自scheduleAtFixedRate()的javadoc:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.