2010-09-26 20 views

risposta

9

Ho avuto questo problema, quindi ho pensato di dare un'occhiata al codice sorgente. Supponendo che si stia utilizzando una configurazione standard di Quartz (memorizzazione di processi e trigger nella RAM invece di un JobStore persistente), allora sembra che Quartz sia sicuro per i thread.

Scavando nel sorgente, si arriva infine al RamJobStore, che memorizza tutti i lavori e i trigger in memoria.

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

In ciascuno degli storeJob (..) e storeTrigger (..) metodi sono disponibili blocchi sincronizzati separate con i propri oggetti unici per la memorizzazione dei lavori e innesca in un thread modo sicuro:

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

e sincronizzare un trigger:

synchronized (triggerLock) { 
     ... 

     synchronized (pausedTriggerGroups) { 
      ... 
     } 
    } 

Così, in breve, sembrerebbe che è possibile effettuare chiamate sicure filo a un'istanza della classe Scheduler

2

This post sul sito Web di Terracotta lo conferma.

Problemi correlati