多个线程能否安全地并发调用由StdSchedulerFactory返回的Scheduler实例的方法?
我曾经遇到过这个问题,所以查看了源代码。假设您正在使用Quartz的标准配置(将作业和触发器存储在RAM中而不是持久化的JobStore),那么Quartz似乎是线程安全的。
深入挖掘源代码,最终可以找到RamJobStore,它将所有作业和触发器存储在内存中。
public void storeJobAndTrigger(SchedulingContext ctxt, JobDetail newJob,
Trigger newTrigger) throws JobPersistenceException {
storeJob(ctxt, newJob, false);
storeTrigger(ctxt, newTrigger, false);
}
synchronized (jobLock) {
if (!repl) {
// get job group
...
}
}
并且同步触发器:
synchronized (triggerLock) {
...
synchronized (pausedTriggerGroups) {
...
}
}