मैं एक रजिस्ट्री में कुछ नियंत्रकों को शुरू करने के लिए एक स्थिर कोड ब्लॉक का उपयोग कर रहा हूं। मेरा प्रश्न इसलिए है, क्या मैं गारंटी दे सकता हूं कि यह स्थिर कोड ब्लॉक केवल एक बार बुलाया जाएगा जब कक्षा पहली बार भरी जाएगी? मैं समझता हूं कि मैं गारंटी नहीं दे सकता कि यह कोड ब्लॉक कब कहा जाएगा, मैं अनुमान लगा रहा हूं कि क्लास लोडर ने पहले इसे लोड किया था। मुझे लगता है कि मैं स्थिर कोड ब्लॉक में वर्ग पर सिंक्रनाइज़ कर सकता हूं, लेकिन मेरा अनुमान है कि यह वास्तव में वैसे भी क्या होता है?
सरल कोड उदाहरण होगा;
class FooRegistry {
static {
//this code must only ever be called once
addController(new FooControllerImpl());
}
private static void addController(IFooController controller) {
// ...
}
}
या मुझे यह करना चाहिए;
class FooRegistry {
static {
synchronized(FooRegistry.class) {
addController(new FooControllerImpl());
}
}
private static void addController(IFooController controller) {
// ...
}
}