2010-09-26 18 views

Respuesta

9

Tuve este problema, así que pensé en mirar el código fuente. Suponiendo que está utilizando una configuración estándar de Quartz (almacenando trabajos y desencadenadores en RAM en lugar de una JobStore persistente), parece que Quartz es seguro para subprocesos.

Al acceder a la fuente, finalmente llegará a RamJobStore, que almacena todos los trabajos y desencadenantes en la memoria.

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

En cada uno de los métodos storeJob (..) y storeTrigger (..), hay bloques sincronizados separadas con sus propios objetos únicos para el almacenamiento de puestos de trabajo y disparadores de una manera segura hilo:

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

y sincronizar un disparador:

synchronized (triggerLock) { 
     ... 

     synchronized (pausedTriggerGroups) { 
      ... 
     } 
    } 

Así que en resumen, parecería que puede realizar llamadas seguras de rosca a una instancia de la clase Programador

2

This post en el sitio web de Terracotta lo confirma.

Cuestiones relacionadas