Quartz调度器实例是否线程安全?

14
1个回答

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) {
            ...
        }
    }

简而言之,似乎您可以对 Scheduler 类的实例进行线程安全调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接