Scheduler के उदाहरण पर एक से अधिक थ्रेड सुरक्षित तरीके से कॉल विधियों को StdSchedulerFactory द्वारा समवर्ती रूप से लौटाया जा सकता है?क्वार्ट्ज शेड्यूलर थ्रेड सुरक्षित हैं?
12
A
उत्तर
9
मुझे यह समस्या थी इसलिए सोचा कि मैं स्रोत कोड को देखूंगा। मान लीजिए कि आप क्वार्ट्ज की मानक कॉन्फ़िगरेशन का उपयोग कर रहे हैं (लगातार जॉबस्टोर की बजाय रैम में नौकरियां और ट्रिगर्स संग्रहीत करना), तो ऐसा लगता है कि क्वार्ट्ज थ्रेड सुरक्षित है।
स्रोत में खोदने के बाद, आप आखिरकार रामजोबस्टोर पहुंच जाएंगे, जो स्मृति में सभी नौकरियों और ट्रिगर्स को स्टोर करता है।
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) {
...
}
}
तो संक्षेप में, यह जाहिर होता है कि आप समयबद्धक वर्ग
का एक उदाहरण के लिए धागा सुरक्षित कॉल कर सकते हैं टेराकोटा वेबसाइट पर
2
This post इसकी पुष्टि करता है।