2010-09-26 9 views

Répondre

9

J'ai eu ce problème si j'ai pensé que je regarderais le code source. En supposant que vous utilisez une configuration standard de Quartz (en stockant les tâches et les déclencheurs dans la RAM au lieu d'un JobStore persistant), il apparaît que Quartz est thread-safe. En fouillant dans la source, vous arriverez finalement au RamJobStore, qui stocke tous les travaux et les déclencheurs en mémoire.

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

Dans chacun des storeJob (..) et storeTrigger (..) méthodes, il y a des blocs séparés synchronisés avec leurs propres objets uniques pour le stockage des emplois et des déclencheurs dans un fil de manière sûre:

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

Et la synchronisation d'un déclencheur:

synchronized (triggerLock) { 
     ... 

     synchronized (pausedTriggerGroups) { 
      ... 
     } 
    } 

donc en bref, il semble que vous pouvez faire du fil des appels de sécurité à une instance de la classe Scheduler

2

This post sur le site Terracotta le confirme.

Questions connexes