मैं जावा में एक सिंगलटन कक्षा को कार्यान्वित कर रहा हूं ताकि यह सुनिश्चित किया जा सके कि वर्ग के एक से अधिक उदाहरण बनाए गए हैं।सिंगलटन क्लास थ्रेडसेफ कैसे बनाएं?
उत्तर
शायद एक उदाहरण के साथ एक enum का उपयोग करने का सबसे अच्छा तरीका है। इसमें धारावाहिक होने और प्रतिबिंब और प्रतिबिंब के खिलाफ सिंगलटन-नेस की गारंटी का अतिरिक्त लाभ है, जो कि "सीधा" सिंगलटन कार्यान्वयन नहीं करता है (निजी? मेरे प्रतिबिंब है, मैं आपके एक्सेस मॉडिफायर्स पर विलुप्त हो जाता हूं!)। यह भी लागू करने के लिए बहुत सरल है:
public enum Singleton {
INSTANCE;
// fields and methods go here
}
सिंगलेट्स प्रति डिफ़ॉल्ट थ्रेडसेफ नहीं हैं। सिंगलटन बनाने का सामान्य तरीका एक कारखाना विधि है जो एक उदाहरण के निर्माण को संभालती है। इस तरह आप उदाहरण निर्माण को नियंत्रित कर सकते हैं।
public class Singleton {
public static final Singleton INSTANCE = new Singleton();
private Singleton() { ... }
}
एक स्थिर आवृत्ति चर का उपयोग आंतरिक "धारक" वर्ग को प्राथमिकता दी जाती है। यदि आप चाहें, तो आप स्थिर सदस्य को निजी भी बना सकते हैं और इसे एक्सेस करने के लिए एक तरीका प्रदान कर सकते हैं, लेकिन जो कुछ भी करता है वह स्टैक पर एक और विधि कॉल जोड़ता है।
यह बल्कि निर्भर करता है कि तुम क्या क्या पसंद किया जाता है के रूप में प्राप्त करने के लिए कोशिश कर रहे हैं - धारक आप एक आलसी सिंगलटन देता है, सरल संस्करण आप आलसी लोड हो रहा है नहीं देता है। –
हां, यह करता है। जब तक वे पहले इस्तेमाल नहीं किए जाते हैं तब तक जावा कक्षाओं को लोड नहीं करता है। –
पूरी तरह से सच नहीं है। जब उन्हें पहले संदर्भित किया जाता है, तो यह उन्हें लोड करता है, उदा। किसी अन्य वर्ग के विधि हस्ताक्षर में। – skaffman
आलसी instanciation के बारे में क्या: getInstance() सिंगलटन देता है या अगर यह पहली कॉल है तो इसे बनाते हैं।
public class MySingleton
{
private static MySingleton instance;
private MySingleton()
{
// construct object . . .
}
// For lazy initialization
public static synchronized MySingleton getInstance()
{
if (instance==null)
{
instance = new MySingleton();
}
return instance;
}
// Remainder of class definition . . .
}
आलसी तत्कालता लगभग कभी जरूरी नहीं है, और यदि यह है, तो जावा कक्षाओं को आलसी लोड करता है, इसलिए वास्तव में घोषणा में उदाहरण बनाना * आलसी तत्काल है - सिंक्रनाइज़ेशन ओवरहेड के बिना (बहुत दुर्लभ मामलों में जो आलसी पर्याप्त नहीं है और स्काफमैन का जवाब बेहतर है) । –
यह भी ध्यान दें कि यह कार्यान्वयन उदाहरण के संदर्भ प्राप्त करने के हर प्रयास को सिंक्रनाइज़ करता है। चूंकि अधिकांश कोड कुछ ऐसा करेंगे: सिंगलटन.getInstance.do कुछ(); सिंगलटन.getInstance.do SomethingElse(); कुल प्रभाव सदस्य सिंक्रनाइज़ेशन को सदस्य पहुंच/उत्परिवर्तन के संदर्भ में कोई थ्रेड सुरक्षा गारंटी के साथ गंभीर रूप से सीमित समेकन होगा। –
जावा में डबल-चेक लॉकिंग टूटा हुआ है http://www.javaworld.com/jw-02-2001/jw-0209-double.html संक्षेप में, यह गारंटी देने का यह तरीका है कि इस वर्ग को तुरंत एक बार परिणाम दिया जा सकता है कठिन खोजने के लिए समेकन मुद्दों। इसका कभी भी उपयोग न करें। – Buhb
सिंगलटन बनाने का सबसे अच्छा तरीका? एक enum का प्रयोग करें।
public enum Singleton {
INSTANCE;
public void foo(){ ... }
}
// Usage:
Singleton.INSTANCE.foo();
आप न केवल डबल इन्स्टेन्शियशन से बचने के लिए वीएम से मदद की बहुत सारी मिलता है, लेकिन यह भी मदद करता है आप अक्रमांकन भ्रष्टाचार से बचें।
यदि आप सहमति के बारे में परवाह करते हैं, तो आप साझा वैश्विक स्थिति का उपयोग नहीं करेंगे।
यदि सिंगलटन एकवचन समांतर समस्या से परिणामों का संचय रखता है तो क्यों नहीं? एक सिंगलटन वैश्विक राज्य का प्रतीक है, और इस तरह यह एक उचित उपयोग परिदृश्य होगा। –
कक्षाओं के लिए कई उपयोग मामले हैं जो केवल एक उदाहरण के साथ प्रदर्शित होते हैं जो प्रक्रियाओं के बीच साझा किया जाता है।बसंत का उपयोग करके एक ठेठ अच्छी तरह से डिज़ाइन किए गए वेबपैप में शायद सिंगलटन स्कोप में तत्काल कक्षाओं का एक गुच्छा होगा, जो कार्यकर्ता धागे के बीच साझा किया जाएगा। एक्सेस संशोधक पर स्कोफिंग के लिए – Buhb
- 1. सिंगलटन क्लास
- 2. जावा में क्रॉस-प्रोसेस सिंगलटन क्लास कैसे बनाएं
- 3. एकाधिक जेवीएम समर्थन के लिए सिंगलटन जावा क्लास कैसे बनाएं?
- 4. सी में सिंगलटन कैसे बनाएं?
- 5. सी # सिंगलटन लॉगिंग क्लास
- 6. एंड्रॉइड: एप्लिकेशन सिंगलटन क्लास
- 7. wpf - सिंगलटन क्लास
- 8. सी ++: सिंगलटन क्लास
- 9. स्टेटिक कन्स्ट्रक्टर और सिंगलटन क्लास
- 10. जावास्क्रिप्ट 'क्लास' और सिंगलटन समस्याओं
- 11. मेरे डब्ल्यूपीएफ मेनविंडो को सिंगलटन कैसे बनाएं?
- 12. थ्रेडसेफ
- 13. स्ट्रिंग क्लास प्रतिकृति कैसे बनाएं?
- 14. सिंगलटन क्लास जिसके लिए कुछ एसिंक कॉल
- 15. पायथन थ्रेडसेफ में क्लास वैरिएबल को संशोधित कर रहा है?
- 16. ग्रेल्स सर्विस क्लास सिंगलटन क्यों है?
- 17. सिंगलटन क्लास अवलोकन करने योग्य संग्रह सदस्य
- 18. मल्टीथ्रेडिंग ऐप में सिंगलटन क्लास, लॉकिंग सुझाव
- 19. थ्रेडसेफ क्लाइंट कॉनमैनगर ऑब्जेक्ट
- 20. सिंगलटन प्रॉपर्टीज
- 21. थ्रेडसेफ लॉगिंग
- 22. जावा क्लास कैसे बनाएं, सी ++ टेम्पलेट क्लास के समान?
- 23. बेस क्लास से प्राप्त एटीएल COM क्लास कैसे बनाएं?
- 24. एक्सकोड में फ्रेमवर्क क्लास कैसे बनाएं?
- 25. एंड्रॉइड: अपना कर्सर क्लास कैसे बनाएं?
- 26. पोर्टेबल क्लास लाइब्रेरी में थ्रेड कैसे बनाएं?
- 27. सिंगलटन
- 28. धागा या थ्रेडसेफ डीएओ प्रति एक डीएओ?
- 29. सी ++ सिंगलटन बनाम स्थिर तरीकों
- 30. जेनरेटर थ्रेडसेफ हैं?
+1। मैंने लोल किया :) – corsiKa