मैं Effective Java
से डबल चेक लॉकिंग के बारे में पढ़ रहा हूं।
कोड निम्नलिखित है:स्थानीय परिवर्तनीय सहायता को यहां कैसे निर्दिष्ट किया जाता है?
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;
}
इसमें कहा गया है कि result
का उपयोग कर अनावश्यक लगता है, लेकिन वास्तव में सुनिश्चित करता है कि field
केवल केवल आम मामले में जहां यह पहले से ही आरंभ नहीं हो जाता में एक बार पढ़ा जाता है।
लेकिन मुझे यह समझ में नहीं आता है।
if(field == null)
सीधे करने में क्या अंतर है?
मुझे नहीं मिलता है क्यों if (result == null)
अलग है, जैसा कि कहा गया है अकेले बेहतर दें।
कृपया इसे समझने में कोई मदद?
के लिए रीडरिंग निर्देशों पर सीमा लगाता है क्या विधि का आगे उपयोग किया जा रहा है? –
हम "आदि" देखना चाहते हैं ... प्रभावी जावा के लिए पृष्ठ संदर्भ क्या है? मेरे पास मेरी प्रतिलिपि नहीं है - लेकिन अन्य शायद। –
@VictorSorokin: अद्यतन – Jim