2010-07-11 17 views
39

मैं एक ऐसा एप्लीकेशन लिख रहा हूं जो उपयोगकर्ता को हैश मैप वापस कर देगा। उपयोगकर्ता को इस एमएपी का संदर्भ मिलेगा। बैकएंड पर, मैं कुछ धागे चला रहा हूं जो मानचित्र को अपडेट करेंगे।धागा सुरक्षित हैश मानचित्र?

मैंने अभी तक क्या किया है?


मैं सभी बैकएंड धागे तो एमएपी अद्यतन करने के लिए एक आम चैनल का हिस्सा बना दिया है। तो बैकएंड पर मुझे यकीन है कि समवर्ती लेखन ऑपरेशन कोई मुद्दा नहीं होगा। उपयोगकर्ता एमएपी अद्यतन करने के लिए कोशिश करता है और साथ ही साथ एमएपी बैकएंड पर अपडेट किया जा रहा है


मुद्दे मैं


  1. हो रहा है -> समवर्ती लिखने आपरेशन समस्या।
  2. यदि उपयोग एमएपी से कुछ पढ़ने की कोशिश करता है और साथ ही एमएपी बैकएंड -> समवर्ती रीड और राइट ऑपरेशन समस्या पर अपडेट किया जा रहा है।

अभी तक मुझे इस तरह का कोई मुद्दा नहीं मिला है, लेकिन मुझे डर है कि मुझे भविष्य में सामना करना पड़ सकता है। कृपया sugesstions दें।

मैं उपयोग कर रहा हूँ ConcurrentHashMap<String, String>.

+0

आप सभी 3 के लिए धन्यवाद। – user381878

उत्तर

51

आप ConcurrentHashMap का उपयोग कर सही रास्ते पर हैं। प्रत्येक बिंदु के लिए:

  1. बाहर तरीकों putIfAbsent और replace दोनों threadsafe कर रहे हैं और hashmap की वर्तमान स्थिति की जाँच और एक परमाणु आपरेशन में इसे अपडेट करने गठबंधन चेक।
  2. get विधि आंतरिक रूप से सिंक्रनाइज़ नहीं है लेकिन इसके लिए उपलब्ध निर्दिष्ट कुंजी के लिए सबसे हालिया मान वापस कर देगा (ConcurrentHashMap class Javadoc for discussion देखें)।

Collections.synchronizedMap की तरह कुछ अधिक ConcurrentHashMap के लाभ putIfAbsent जो पारंपरिक मानचित्र get और एक आंतरिक सिंक्रनाइज़ तरह से put तर्क प्रदान की तरह संयुक्त तरीकों है। इन विधियों का उपयोग करें और ConcurrentHashMap पर अपना स्वयं का कस्टम सिंक्रनाइज़ेशन प्रदान करने का प्रयास करें क्योंकि यह काम नहीं करेगा। java.util.concurrent संग्रह आंतरिक रूप से सिंक्रनाइज़ किए गए हैं और अन्य थ्रेड ऑब्जेक्ट को सिंक्रनाइज़ करने के प्रयासों का जवाब नहीं देंगे (उदा। synchronize(myConcurrentHashMap){} अन्य धागे को अवरुद्ध नहीं करेंगे)।

+0

ConcurrentHashMap एक ConcurrentSkipListMap की तुलना कैसे करता है? – pratnala

7

साइड नोट:

आप क्लिक करें, यह Highly Scalable Java पुस्तकालय का हिस्सा है क्लिफ द्वारा ताला मुक्त हैश तालिका कार्यान्वयन में देखना चाहते हो सकता है

(यहाँ एक Google Talk से है क्लिफ इस लॉक फ्री हैश के बारे में क्लिक करें।)

0

ConcurrentHashMap आपके द्वारा वर्णित परिदृश्यों के साथ किसी भी समस्या से बचने के लिए डिज़ाइन और कार्यान्वित किया गया था। आपको किसी बात की चिंता करने की आवश्यकता नहीं है।

एक हैश तालिका retrievals की पूर्ण संगामिति और updates.updates के लिए समायोज्य उम्मीद संगामिति समर्थन।

javadoc of ConcurrentHashMap

संबंधित मुद्दे