Java ThreadPoolScheduler间隔小于任务的执行时间
我使用Spring ThreadPoolTaskScheduler每5分钟执行一个非同步方法。有时,该方法的执行时间超过5分钟。我曾尝试观察这种场景中的行为,似乎在当前执行完成之前(即使5分钟的间隔结束),不会再次执行该方法 虽然这符合我想要完成的任务,但是我想知道为什么在5分钟后没有生成第二个线程来并行执行这个方法,而这个线程需要5分钟以上的时间。起初我认为这与池大小有关,默认情况下池大小为1。然而,即使我增加了池的大小,行为仍然是一样的 我试图深入研究ThreadPoolScheduler代码,它似乎在内部通过ThreadPoolExecutor运行任务。它是否设计为只运行一个线程,在触发另一个执行之前等待一个执行完成,即使间隔已过 就代码而言,这就是我所做的-Java ThreadPoolScheduler间隔小于任务的执行时间,java,spring,concurrency,Java,Spring,Concurrency,我使用Spring ThreadPoolTaskScheduler每5分钟执行一个非同步方法。有时,该方法的执行时间超过5分钟。我曾尝试观察这种场景中的行为,似乎在当前执行完成之前(即使5分钟的间隔结束),不会再次执行该方法 虽然这符合我想要完成的任务,但是我想知道为什么在5分钟后没有生成第二个线程来并行执行这个方法,而这个线程需要5分钟以上的时间。起初我认为这与池大小有关,默认情况下池大小为1。然而,即使我增加了池的大小,行为仍然是一样的 我试图深入研究ThreadPoolScheduler代
<task:scheduler id="scheduler" pool-size="1" />
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
executeThis(); // this takes more than 5 minutes sometime
}
}, 5*60*1000);
scheduleAtFixedRate(新的Runnable(){
公开募捐{
executeThis();//有时需要5分钟以上的时间
}
}, 5*60*1000);
问候,
Tushar您的池大小为1—因此,5分钟后,它将提交一个新任务—但是,没有可用的线程来运行它。因此,任务等待原始线程完成,然后安排新任务。如果任务确实需要以固定的时间间隔启动,请增加池大小。不会生成第二个线程,因为它会破坏方法的约定,如中所述: 如果此任务的任何执行时间超过其周期,则 后续执行可能会延迟开始,但不会同时执行 执行
此行为是经过设计和记录的行为。正如我前面所说,我确实尝试过增加池大小,但这似乎不会影响行为。