जब मैं Double Checked Locking मुहावरा के बारे में विकिपीडिया के लेख पढ़ रहा था, मैं उलझन में हूँ के बारे में यह कार्यान्वयन है:यह डबल-चेक लॉक एक अलग रैपर वर्ग के साथ लागू क्यों किया जाता है?
public class FinalWrapper<T> {
public final T value;
public FinalWrapper(T value) {
this.value = value;
}
}
public class Foo {
private FinalWrapper<Helper> helperWrapper = null;
public Helper getHelper() {
FinalWrapper<Helper> wrapper = helperWrapper;
if (wrapper == null) {
synchronized(this) {
if (helperWrapper == null) {
helperWrapper = new FinalWrapper<Helper>(new Helper());
}
wrapper = helperWrapper;
}
}
return wrapper.value;
}
}
मैं बस समझ में नहीं आता कि हम क्यों आवरण बनाने के लिए की जरूरत है। क्या यह पर्याप्त नहीं है?
if (helperWrapper == null) {
synchronized(this) {
if (helperWrapper == null) {
helperWrapper = new FinalWrapper<Helper>(new Helper());
}
}
}
यह है आवरण का उपयोग कर, क्योंकि आवरण ढेर पर संग्रहीत है और helperWrapper ढेर में संग्रहित है प्रारंभ में तेजी लाने सकता है, क्योंकि?
@pst: मुझे लगता है कि वह अतिरिक्त 'रैपर' स्थानीय चर के बारे में पूछ रहा है जिसमें 'हेल्परवापर' की एक प्रति है। – casablanca
@ कैसाब्लांका ओह, हम, उस कोण को पूरी तरह याद कर चुके हैं .... अब मैं उलझन में हूं, सवाल के बाकी शब्द के कारण। "मुझे समझ में नहीं आता कि हमें एक रैपर बनाने की जरूरत क्यों है।" :( –
रास्ते से बढ़िया सवाल। एसओ! – Voo