जब जावा में एक स्थिर सिंगलटन आप यह कर सकते हैं के आलसी प्रारंभ कर:क्या हम जावा सदस्य की दर्द रहित आलसी लोडिंग को उसी तरह से प्राप्त कर सकते हैं जिस तरह से हम स्थिर सिंगलटन के साथ कर सकते हैं?
public class Bob {
private static class SingletonWrapper {
private static final Bob instance = new Bob();
}
public static Bob getInstance() {
return SingletonWrapper.instance;
}
}
क्योंकि भीतरी वर्ग SingletonWrapper
केवल लोड किया जाता है जब पहली पहुँचा Bob()
तक getInstance()
कहा जाता है नहीं बनाई गई है।
मेरा सवाल यह है कि क्या ऐसी कोई भी चाल है जिसका प्रयोग किसी गैर-स्थैतिक संदर्भ में सदस्य चर के आलसी तत्कालता के लिए किया जा सकता है।
public class Bob {
// Clearly this doesn't work as not lazy
private final InnerWrapper wrapper = new InnerWrapper();
private class InnerWrapper {
private final Jane jane = new Jane();
}
public Jane getJane() {
return wrapper.jane;
}
}
वहाँ किसी भी तरह से हम Bob
भीतर Jane
का एक उदाहरण है और पुनः जाँच लें ताला या AtomicReference
का उपयोग किए बिना सुरक्षित रूप से थ्रेड है केवल मांग पर बनाया उदाहरण कर सकता है। आदर्श रूप से प्राप्त विधि इन उदाहरणों में से एक के रूप में सरल रहनी चाहिए, लेकिन यदि यह संभव नहीं है तो get
विधि का सबसे सरल और तेज़ संभव (सबसे प्रभावी) निष्पादन आदर्श होगा।
@assylias टिप्पणी कहते हैं कि आलसी प्रारंभ नहीं मारूंगा। जैसे ही आप 'बॉब' बनाते हैं, आप हमेशा भी और तुरंत 'जेन' बनाते हैं। –
मेरा बुरा मैंने बहुत तेज़ पढ़ा - किसी भी कारण से आप परमाणु संदर्भ नहीं चाहते हैं? यह संभवतः सीएचएम विकल्प से बेहतर प्रदर्शन करेगा। – assylias
@assylias कोई विशिष्ट कारण नहीं है। असल में मैं सिर्फ यह जानना चाहता हूं कि मेरे विकल्प क्या हैं - इस बात पर विचार करना कि स्थिर रैपर चाल कितनी सरल और प्रभावी है, सिंगलटन की आलसी शुरुआत के लिए यह शर्म की बात है कि हम सदस्यों की आलसी शुरुआत के लिए कुछ नहीं आ सकते हैं, –