2010-09-26 28 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的實例