इस विषय पर कुछ प्रश्न हैं, लेकिन इस समस्या के आसपास सबसे अधिक स्कर्ट क्योंकि यह सवाल का इरादा नहीं है।क्या मुझे स्थिर अस्थिर चर को सिंक्रनाइज़ करना चाहिए?
अगर मैं मेरी कक्षा में एक स्थिर अस्थिर है:
private static volatile MyObj obj = null;
और एक विधि में नीचे मैं करता हूँ:
public MyObj getMyObj() {
if (obj == null) {
obj = new MyObj();// costly initialisation
}
return obj;
}
मैं केवल एक धागा क्षेत्र के लिए लिखते हैं सुनिश्चित करने के लिए सिंक्रनाइज़ करना होगा , या obj == null
सशर्त मूल्यांकन का मूल्यांकन करने वाले अन्य धागे के लिए तत्काल दिखाई देगा?
इसे एक और तरीका रखने के लिए: क्या अस्थिरता आपको स्थैतिक चर पर लिखने के लिए सिंक्रनाइज़ करने के आसपास मिलती है?
मैं धारक मार्ग नहीं जा सकता: यह मेरे बाहरी वर्ग पर सिंगलटन को मजबूर करता है जिसके लिए मैं विकासशील समग्र ढांचे में कहीं अधिक सोच और परिवर्तन की आवश्यकता है। जिस समस्या को हल करने की आवश्यकता थी वह स्थैतिक उदाहरण की परमाणु रचना थी। मैंने एक स्थैतिक विधि का उपयोग किया और परमाणु असाइनमेंट और समवर्ती सुरक्षा की अनुमति देने के लिए इसे स्थिर ('obj') घोषित किया। –
@atc: नहीं, धारक मार्ग बाहरी वर्ग को सिंगलटन होने के लिए मजबूर नहीं करता है। यह वास्तव में स्पष्ट नहीं है कि आपका मतलब क्या है ... –
स्पष्टता के लिए: यह 'स्थैतिक अस्थिर' चर मूल रूप से ऑब्जेक्ट फैक्ट्री में था जिसने इसे रनटाइम पर इंजेक्शन दिया ताकि यह उदाहरण के लिए जिम्मेदार हो सके। यह कहा गया स्टेक var ('MyObj' ऊपर) के कार्यान्वयन के विवरण के कारण है। धारक मुहावरे को संतुष्ट करने के लिए 'निजी' कन्स्ट्रक्टर का उपयोग करना मतलब था कि मैं ऑब्जेक्ट फैक्ट्री के लिए विरासत के फायदे नहीं रख सका। यहां धारक मुहावरे को कम करने के बजाय, मैंने सोचा कि मैं डबल-चेक-सिंक्रनाइज़ रूट पर जाऊंगा क्योंकि कोडबेज के साथ कम से कम घर्षण था और काम करने के लिए साबित हुआ था। –