Singleton: Thread-Safe Implementations
double-checked locking, enum या holder pattern का उपयोग करके thread-safe Singleton बनाएँ।
Singleton: Thread-Safe Implementations, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
सिंगलटन पैटर्न
सिंगलटन यह सुनिश्चित करता है कि JVM में किसी वर्ग का केवल एक इंस्टेंस हो। सामान्य उपयोग: कॉन्फ़िगरेशन प्रबंधक, कनेक्शन पूल और लॉग लेखन सेवाएँ।
भोला सिंगलटन — थ्रेड-सुरक्षित नहीं
क्लासिक विलंबित सिंगलटन समवर्ती पहुँच के दौरान विफल हो जाता है: दो थ्रेड एक ही समय में null जाँच पार कर सकते हैं और दो इंस्टेंस बना सकते हैं।
public class Config {
private static Config instance;
private Config() {}
public static Config getInstance() {
if (instance == null) { // race condition!
instance = new Config();
}
return instance;
}
}Synchronized मेथड — सरल लेकिन धीमी
synchronized को getInstance() में जोड़ने से यह थ्रेड-सुरक्षित हो जाती है, लेकिन इंस्टेंस बनने के बाद भी हर कॉल पर लॉक लगता है — यह अनावश्यक अतिरिक्त खर्च है।
public static synchronized Config getInstance() {
if (instance == null) instance = new Config();
return instance;
}दोहरी जाँच वाला लॉकिंग
पहले बिना लॉक के जाँच करें, फिर synchronized ब्लॉक के अंदर दोबारा जाँच करें। निर्देशों के पुनर्क्रमण को रोकने के लिए फ़ील्ड पर volatile आवश्यक है।
public class Config {
private static volatile Config instance;
private Config() {}
public static Config getInstance() {
if (instance == null) {
synchronized (Config.class) {
if (instance == null) instance = new Config();
}
}
return instance;
}
}मांग पर आरंभीकरण वाला Holder
यह सबसे सुरक्षित और कुशल विलंबित सिंगलटन है: एक निजी static नेस्टेड वर्ग इंस्टेंस रखता है। JVM इसे तभी लोड करता है जब getInstance() पहली बार कॉल किया जाता है — वर्ग लोड करना स्वभावतः थ्रेड-सुरक्षित है।
public class Config {
private Config() {}
private static final class Holder {
static final Config INSTANCE = new Config();
}
public static Config getInstance() {
return Holder.INSTANCE;
}
}Enum सिंगलटन
Effective Java एक ही स्थिरांक वाले enum की अनुशंसा करता है। यह संक्षिप्त, थ्रेड-सुरक्षित, सीरियलाइज़ेशन-सुरक्षित और रिफ्लेक्शन हमलों से अप्रभावित होता है।
public enum AppConfig {
INSTANCE;
private String apiUrl = "https://api.example.com";
public String getApiUrl() { return apiUrl; }
}
// Usage:
String url = AppConfig.INSTANCE.getApiUrl();तत्काल आरंभीकरण
यदि स्टार्टअप लागत स्वीकार्य है, तो static final फ़ील्ड के माध्यम से वर्ग लोड होने के समय इंस्टेंस आरंभ करें। यह सरल और थ्रेड-सुरक्षित है, लेकिन इंस्टेंस का उपयोग न होने पर भी हमेशा बनाया जाता है।
public class Config {
private static final Config INSTANCE = new Config();
private Config() {}
public static Config getInstance() { return INSTANCE; }
}सिंगलटन और सीरियलाइज़ेशन
सीरियलाइज़ करके फिर डीसीरियलाइज़ किए गए सिंगलटन से एक नया इंस्टेंस बनता है, जब तक कि आप INSTANCE लौटाने वाला readResolve() न जोड़ें। enum तरीका इसे अपने-आप संभाल लेता है।
private Object readResolve() { return INSTANCE; }सिंगलटन और रिफ्लेक्शन हमले
रिफ्लेक्शन निजी कंस्ट्रक्टर को कॉल कर सकता है। यदि कोई इंस्टेंस पहले से मौजूद हो, तो कंस्ट्रक्टर में अपवाद फेंककर इससे बचाव करें। JVM विनिर्देश के अनुसार enum सिंगलटन इससे अप्रभावित होते हैं।
private Config() {
if (Holder.INSTANCE != null) {
throw new IllegalStateException("Use getInstance()");
}
}निर्भरता इंजेक्शन फ़्रेमवर्क में सिंगलटन
Spring में बीन्स डिफ़ॉल्ट रूप से सिंगलटन होते हैं (@Scope("singleton"))। आपको सिंगलटन पैटर्न को मैन्युअल रूप से बहुत कम लागू करना पड़ता है; DI कंटेनर को इसे प्रबंधित करने दें।
@Component // Spring manages a single instance
public class FeatureFlags {
private final boolean darkMode = true;
public boolean isDarkMode() { return darkMode; }
}सिंगलटन का परीक्षण
सिंगलटन का यूनिट परीक्षण कठिन होता है, क्योंकि वे वैश्विक स्थिति रखते हैं। मैन्युअल सिंगलटन कोड के बजाय निर्भरता इंजेक्शन को प्राथमिकता दें; कंस्ट्रक्टर इंजेक्शन के माध्यम से परीक्षणों में मॉक इंस्टेंस इंजेक्ट करें।
त्वरित जाँच
Effective Java में सिंगलटन का कौन-सा तरीका सुझाया गया है?
पुनरावलोकन
थ्रेड-सुरक्षित सिंगलटन के लिए मांग पर आरंभीकरण वाले Holder या enum तरीके का उपयोग करें। भोले विलंबित आरंभीकरण से बचें। Spring ऐप्लिकेशन में फ़्रेमवर्क को दायरा-प्रबंधन संभालने दें।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Singleton: Thread-Safe Implementations” पाठ निःशुल्क है?
हाँ—“Singleton: Thread-Safe Implementations” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Singleton: Thread-Safe Implementations” में मैं क्या सीखूँगा?
double-checked locking, enum या holder pattern का उपयोग करके thread-safe Singleton बनाएँ। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“Singleton: Thread-Safe Implementations” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Singleton: Thread-Safe Implementations
- Factory Method Pattern
- Product Families के लिए Abstract Factory
- Fluent API के साथ Builder Pattern