ठीक है अगर आपके तार काफी अद्वितीय हैं (उदाहरण के लिए, क्रिप्टोग्राफिक हैश के माध्यम से उत्पन्न) क्लाइंट आईडी पर सिंक्रनाइज़ करना शायद काम होगा , जब तक आप String.intern()
. को कॉल करते हैं पहले उन पर। चूंकि आईडी अद्वितीय हैं, इसलिए आपके अन्य मॉड्यूल के साथ विरोध होने की संभावना नहीं है, जब तक कि आप उन्हें अपनी आईडी नहीं देते और वे उन पर ताला लगाने की बुरी प्रथा का पालन करते हैं।
उस ने कहा, यह शायद एक बुरा विचार है। एक दिन अनावश्यक विवाद में चलने की छोटी संभावना के अलावा यदि कोई अन्य व्यक्ति उसी String
पर लॉक करता है उदाहरण के लिए, मुख्य समस्या यह है कि आपको intern()
. करना होगा आपके सभी String
ऑब्जेक्ट्स, और यह अक्सर स्ट्रिंग इंटर्न टेबल के मूल कार्यान्वयन के कारण खराब प्रदर्शन से ग्रस्त है, यह निश्चित आकार है, आदि। यदि आपको वास्तव में केवल String
पर आधारित लॉक करने की आवश्यकता है , आप अमरूद के Interners.newWeakInterner()
आंतरिक कार्यान्वयन, जो बहुत बेहतर प्रदर्शन करने की संभावना है। बिल्ट-इन String
. पर टकराव से बचने के लिए अपनी स्ट्रिंग को किसी अन्य वर्ग में लपेटें ताला। उस दृष्टिकोण पर अधिक विवरण इस उत्तर में
.
इसके अलावा, अक्सर लॉक करने के लिए एक और प्राकृतिक वस्तु होती है, जैसे सत्र ऑब्जेक्ट में लॉक आदि।
यह काफी हद तक इस सवाल से मिलता-जुलता है। जिसके अधिक विस्तृत उत्तर हैं।
... या, कम से कम, टकराव को कम करने के लिए पर्याप्त बिट्स हैं और यदि आपकी क्लाइंट आईडी आपके हमले की सतह .