हाय जावा प्रभावी संस्करण से स्निपेट नीचे है। यहां लेखक का दावा है कि निम्नलिखित कोड का कोड 25% तेज है जिसमें आप परिणाम चर का उपयोग नहीं करते हैं। "यह वैरिएबल क्या करता है यह पुस्तक यह सुनिश्चित करने के लिए है कि क्षेत्र सामान्य मामले में केवल एक बार पढ़ा जाता है जहां यह पहले ही प्रारंभ हो चुका है।" । मुझे यह समझने में सक्षम नहीं है कि मूल्य को प्रारंभ करने के बाद यह कोड तेज क्यों होगा, यदि हम स्थानीय चर परिणाम का उपयोग नहीं करते हैं। किसी भी मामले में प्रारंभिकरण के बाद आपके पास केवल एक अस्थिर पढ़ा जाएगा चाहे आप स्थानीय चर परिणाम का उपयोग करें या नहीं।जोशुआ ब्लॉच प्रभावी जावा उदाहरण में डबल चेक लॉकिंग 25% तेज है उदाहरण
// Double-check idiom for lazy initialization of instance fields
private volatile FieldType field;
FieldType getField() {
FieldType result = field;
if (result == null) { // First check (no locking)
synchronized(this) {
result = field;
if (result == null) // Second check (with locking)
field = result = computeFieldValue();
}
}
return result;
}
उम, क्या यह पहला संस्करण है? दो साल के लिए दो बार चेक लॉकिंग को निराश कर दिया गया है – fge
और इसका कारण यह है: http://stackoverflow.com/questions/4926681/why-is-double-checked-locking-broken-in-java?rq=1 – Lenymm
@fge : ज़रुरी नहीं। जावा 5 के बाद से, यह वास्तव में एक ठीक पैटर्न है: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html –