हाँ, यह (किसी भी सिंक्रनाइज़ किए गए ब्लॉक / फ़ंक्शन पर) होगा।
मैं खुद के लिए कुछ दिनों के लिए इस सवाल के बारे में सोच रहा था (वास्तव में कोटलिन में)। मुझे अंत में अच्छी व्याख्या मिली और मैं इसे साझा करना चाहता हूं:
क्लास लेवल लॉक रनटाइम पर क्लास के सभी उपलब्ध इंस्टेंस में से किसी एक में सिंक्रोनाइज़्ड ब्लॉक में एंटर करने के लिए कई थ्रेड्स को रोकता है। इसका मतलब है कि अगर रनटाइम में डेमोक्लास के 100 इंस्टेंसेस हैं, तो एक समय में किसी भी एक में केवल एक धागा ही डेमोमेथोड () को निष्पादित कर पाएगा और अन्य सभी इंस्टेंस अन्य थ्रेड्स के लिए लॉक हो जाएंगे।
स्थिर डेटा थ्रेड को सुरक्षित बनाने के लिए हमेशा क्लास स्तर की लॉकिंग की जानी चाहिए। जैसा कि हम जानते हैं कि स्टेटिक कीवर्ड क्लास स्तर के तरीकों का डेटा संबद्ध करता है, इसलिए स्टैटिक फ़ील्ड्स या लॉकिंग क्लास स्तर पर इसे बनाने के लिए लॉकिंग का उपयोग करें।
प्लस । नोटिस करने के लिए क्यों .class यह सिर्फ इसलिए .class
है क्योंकि वर्ग के किसी भी स्थिर चर के समान है:
private final static Object lock = new Object();
जहाँ लॉक वैरिएबल का नाम क्लास है और टाइप क्लास <T> है
और पढ़ें:
https://howtodoinjava.com/java/multi-threading/object-vs-class-level-locking/