我一直想知道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秒后,一项任务是否会被安排,无视上一轮任务的执行(未完成)?因为如果是这种情况,这个代码最终会在耗尽内存后崩溃。
非常感谢帮助。
谢谢。
答案 0 :(得分:1)
来自scheduleAtFixedRate()
的javadoc:
如果此任务的执行时间超过其周期,那么 后续处决可能会延迟,但不会同时执行 执行。
意味着任务将启动一次,但由于它永远不会完成,因此不会成为其他调用。你只是在池中浪费一个线程。
这同样适用于scheduleWithFixedDelay()
,因为延迟是从上一次执行完成的时间算起的(因为它没有完成,所以不会发生下一次执行)。