gpt4 book ai didi

concurrency - Quartz 调度程序实例线程安全吗?

转载 作者:行者123 更新时间:2023-12-04 01:03:16 29 4
gpt4 key购买 nike

多个线程可以安全地调用 Scheduler 实例上的方法吗?由 StdSchedulerFactory 返回同时?

最佳答案

我遇到了这个问题,所以想看看源代码。假设您使用的是 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 block),它们具有自己独特的对象,用于以线程安全的方式存储作业和触发器:
synchronized (jobLock) {
if (!repl) {
// get job group
...
}
}

并同步触发器:
synchronized (triggerLock) {
...

synchronized (pausedTriggerGroups) {
...
}
}

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

关于concurrency - Quartz 调度程序实例线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3796054/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com