में डबल चेक लॉकिंग कई लोगों के मुताबिक, कुछ हद तक सामान्य डबल-चेक किए गए लॉकिंग मुहावरे जावा के लिए टूटा हुआ है जब तक कि आप 1.5 या बाद में नहीं चल रहे हों और volatile
कीवर्ड का उपयोग करें।एंड्रॉइड
एक टूट की दोबारा जांच कर ताला नमूना: उपरोक्त http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
प्यूघ के विश्लेषण जावा VMs के लिए है:
// Broken multithreaded version
// "Double-Checked Locking" idiom
class Foo {
private Helper helper = null;
public Helper getHelper() {
if (helper == null)
synchronized(this) {
if (helper == null)
helper = new Helper();
}
return helper;
}
// other functions and members...
}
नमूना इस लेख है, जो भी इसे ठीक करने का विवरण प्रदान करता से आता है। मैं एंड्रॉइड पर काम करता हूं और अक्सर पुस्तकालयों का उपयोग करता हूं जो डबल-चेक किए गए लॉकिंग को नियोजित करते हैं। क्या दल्विक वीएम का मेमोरी मॉडल इस मुहावरे का समर्थन करता है?
आप शायद अनुमान लगा सकते हैं कि मैं किस पर देख रहा था;) – Snicolas