Я использую 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);
С уважением,
Tushar