यह एक बुरा विचार है क्योंकि यदि कोई अन्य थ्रेड महत्वपूर्ण खंड में संदर्भ बदलता है, तो धागे अब एक ही संदर्भ को नहीं देख पाएंगे, और इसलिए वे एक ही ऑब्जेक्ट पर सिंक्रनाइज़ नहीं करेंगे, इस प्रकार अनियंत्रित चल रहे हैं। उदाहरण:
synchronized(lock1) {
lock1 = new Object();
sharedVariable++;
}
मान लें कि 2 धागे इस महत्वपूर्ण खंड में प्रवेश करने की कोशिश कर रहे हैं। थ्रेड 1 प्रवेश और थ्रेड 2 इंतजार कर रहा है। थ्रेड 1 चला जाता है, lock1
पुन: असाइन करता है और आय प्राप्त करता है। अब थ्रेड 2 एक थ्रेड 1 प्राप्त करने की तुलना में एक अलग लॉक देखता है, जो भी मुफ़्त है, इसलिए यह महत्वपूर्ण अनुभाग भी दर्ज कर सकता है। मज़ा आता है!
यदि ऑब्जेक्ट final
है, तो आप किसी भिन्न ऑब्जेक्ट के संदर्भ को पुन: असाइन नहीं कर सकते हैं, इसलिए उपर्युक्त समस्या अब लागू नहीं होती है।
मुझे लगता है कि आप अपरिवर्तनीय वर्गों के साथ उत्परिवर्तनीय क्षेत्रों को भ्रमित कर रहे हैं (एक वर्ग जिसमें केवल अपरिवर्तनीय फ़ील्ड हैं)। –