2010-09-26 30 views

回答

9

我有这个问题,所以认为我会看看源代码。假设你使用Quartz的标准配置(在RAM中存储作业和触发器而不是持久的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) { 
      ... 
     } 
    } 

因此,在短期,它会出现,你可以使线程安全调用调度类

0123的实例