Я использую Spring ThreadPoolTaskScheduler для выполнения несинхронизированного метода каждые 5 минут. Иногда выполнение метода занимает более 5 минут. Я попытался наблюдать за поведением в таком сценарии, и кажется, что этот метод не выполняется снова, пока текущее исполнение не завершится (даже если 5-минутный интервал завершен).Интервал ThreadPoolScheduler меньше времени выполнения задачи
Хотя это соответствует тому, чего я хочу достичь, но мне интересно, почему второй поток не порождается через 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);
С уважением,
Tushar
Как я уже говорил ранее, я попытался увеличить размер пула, но это, похоже, не влияет на поведение. – Tushar