Tus*_*har 3 java concurrency spring
我使用 Spring ThreadPoolTaskScheduler 每 5 分钟执行一个不同步的方法。有时该方法的执行时间会超过 5 分钟。我试图观察这种情况下的行为,并且似乎在当前执行完成之前该方法不会再次执行(即使 5 分钟间隔结束)。
虽然这适合我想要完成的任务,但我想知道为什么 5 分钟后没有生成第二个线程来与花费超过 5 分钟的线程并行执行该方法。起初我认为这与池大小有关,默认情况下为 1。但是,即使我增加了池大小,行为仍然保持不变。
我尝试深入研究 ThreadPoolScheduler 代码,发现它在内部通过 ThreadPoolExecutor 运行任务。它是否设计为仅运行一个线程,即使间隔已过,该线程也会等待一个执行完成后再触发另一个执行?
就代码而言,这是我所做的 -
<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);
Run Code Online (Sandbox Code Playgroud)
问候,
图沙尔
| 归档时间: |
|
| 查看次数: |
814 次 |
| 最近记录: |