मेरे पास एक सिंक्रनाइज़ किया गया मानचित्र है (Collections.synchronizedMap()
के माध्यम से) जिसे थ्रेड ए थ्रेड बी द्वारा पढ़ और अपडेट किया जाता है, केवल Map.keySet()
(केवल पढ़ने के लिए) के माध्यम से मानचित्र तक पहुंचता है।एक आर/डब्ल्यू थ्रेड और एक केवल पढ़ने के लिए थ्रेड के बीच मानचित्र सिंक्रनाइज़ करने के लिए कैसे?
मुझे इसे कैसे सिंक्रनाइज़ करना चाहिए? docs say कि keySet() (संग्रह के लिए सिंक्रनाइज़ किए गए मैप) "सिंक्रनाइज़ ब्लॉक में नहीं होना चाहिए"। मैं एक सिंक्रनाइज़ ब्लॉक के भीतर थ्रेड ए को पढ़/लिखने का उपयोग कर सकता हूं, लेकिन क्या यह भी आवश्यक है?
मुझे लगता है कि यह और भी, एक तुल्यकालन मानचित्र, या एक सिंक्रनाइज़ ब्लॉक का उपयोग करने के अगर Map.keySet सिंक्रनाइज़ किए जाने (ऊपर डॉक्स लिंक के अनुसार) की जरूरत नहीं है मेरे लिए अजीब लगता है ...
अद्यतन: मुझे याद आया कि कीसेट को पुन: सिंक्रनाइज़ किया जाना चाहिए, भले ही कुंजीसेट को पुनर्प्राप्त करने के लिए सिंक की आवश्यकता न हो। KeySet को देखने में सक्षम होने के बिना विशेष रूप से रोमांचक नहीं है, इसलिए अंतिम परिणाम = सिंक्रनाइज़ेशन आवश्यक है। इसके बजाय एक ConcurrentHashMap का उपयोग करना।
यह जावा 3 डी के बारे में है? –
@ tuğrulbüyükışık nope। सामान्य जावा समवर्ती प्रश्न। – ericsoco