Подтвердить что ты не робот

Когда срабатывает кварцевое задание, это новый экземпляр класса задания?

Я очень новичок в Quartz, и у меня есть некоторые сомнения в жизненном цикле работы.

Предположим, что у меня есть одно задание, настроенное для выполнения некоторых действий.

Работа срабатывает и заканчивается. Когда он срабатывает снова, это тот же самый экземпляр (возможно, установленный для сна и пробуждение планировщиком), или это новый экземпляр задания (после завершения задания он убит и когда условие триггера встречается снова, создается новый экземпляр задания)

Я задаю такой вопрос, потому что когда я отлаживаю свое приложение (spring 3 mvc с поддержкой кварца), я вижу новые экземпляры задания и новые потоки с SimpleThreadPool $WorkerThreadRun(), которые открываются каждый раз при запуске задания, Потоки SimpleThreadPool $WorkerThreadRun() накапливаются и никогда не завершаются.

Я просто хочу знать, хорошо ли это поведение или я должен заполнить память; -)

Может ли кто-нибудь дать мне какое-то объяснение? Спасибо заранее.

4b9b3361

Ответ 1

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

Однако, если вы используете Spring поддержку Quartz, особенно MethodInvokingJobDetailFactoryBean, Spring будет обрабатывать жизненный цикл вашей работы (он в основном вызывает назначенный метод для одного из ваших beans). Но, похоже, это не так в вашем приложении.

Конечно, после того, как задание завершено, и никакие другие ссылки не указывают на него (что является нормальным случаем) сборщик мусора в конечном итоге освободит память, занятую заданием).

Наконец о потоках - Quartz создает фиксированный пул рабочих потоков (см. org.quartz.threadPool.threadCount параметр конфигурации). Каждый раз, когда вы выполняете задание, Quartz может решить использовать другой поток, но он не будет создавать новый поток для каждого триггера.

Ответ 2

Я напишу о версии 2.1.5 (последняя версия), но она также может быть верной для других версий.

Job -stance, созданный некоторым экземпляром "JobFactory" с функцией "newJob" (SimpleJobFactory). Вызов" newJob ", выполненный в" initialize "-методе JobRunShell -class. JobRunShell -объект, содержащийся в локальной переменной" QuartzSchedulerThread.run "и не сохраняется в любом другом списке или поле.

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