2012-01-15 3 views
2

Я использую 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

ответ

4

Второй поток не породило, поскольку это нарушило бы договор метода, указанный в its javadoc:

Если какое-либо выполнение этой задачи занимает больше времени, чем период, то последующего выполнения может начаться с опозданием, но не будет выполняться одновременно .

Такое поведение является задуманным документированным поведением.

3

Ваш размер бассейна 1 - таким образом, 5 минут в, она подаёт новая задача - однако для ее запуска нет потока. Таким образом, задача ждет, пока исходный поток не будет выполнен, а затем запланирует новую задачу. Увеличьте размер пула, если задача - это то, что действительно нужно запускать с фиксированным интервалом.

+0

Как я уже говорил ранее, я попытался увеличить размер пула, но это, похоже, не влияет на поведение. – Tushar

Смежные вопросы