2010-09-26 5 views

ответ

9

У меня была эта проблема, поэтому я подумал, что посмотрю на исходный код. Предполагая, что вы используете стандартную конфигурацию Quartz (сохранение заданий и триггеров в ОЗУ вместо постоянной записи JobStore), тогда оказывается, что Quartz является потокобезопасным.

Копаясь в источнике, вы, наконец, попадете в RamJobStore, где хранятся все задания и триггеры в памяти.

public void storeJobAndTrigger(SchedulingContext ctxt, JobDetail newJob, 
     Trigger newTrigger) throws JobPersistenceException { 
    storeJob(ctxt, newJob, false); 
    storeTrigger(ctxt, newTrigger, false); 
} 

В каждом из storeJob (..) и storeTrigger (..) методы, есть отдельные синхронизированные блоки с их собственными уникальными объектами для хранения заданий и триггеров в потокобезопасных образом:

synchronized (jobLock) { 
     if (!repl) { 
      // get job group 
      ... 
     } 
    } 

И синхронизация триггера:

synchronized (triggerLock) { 
     ... 

     synchronized (pausedTriggerGroups) { 
      ... 
     } 
    } 

Короче говоря, это может показаться, что вы можете сделать Потокобезопасную вызовы к экземпляру планировщика класса

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