, HashMap
और ConcurrentHashMap
पर रैपर वर्ग, SynchronizedMap
का उपयोग करने के बीच क्या अंतर है? क्या यह HashMap
को संशोधित करते समय इसे संशोधित करने में सक्षम है (ConcurrentHashMap
)?ConcurrentHashMap बनाम सिंक्रनाइज़ हैश मैप
उत्तर
सिंक्रनाइज़ HashMap
:
प्रत्येक विधि एक वस्तु के स्तर का ताला का उपयोग कर समन्वयित है। तो synchMap पर प्राप्त करें और डालें विधियां लॉक प्राप्त करें।
पूरे संग्रह को लॉक करना एक प्रदर्शन ओवरहेड है। जबकि एक थ्रेड लॉक पर रहता है, कोई अन्य थ्रेड संग्रह का उपयोग नहीं कर सकता है।
ConcurrentHashMap
JDK 5.
में पेश किया गया था वहाँ वस्तु स्तर पर कोई ताला है, लॉकिंग एक बहुत अधिक विस्तृत रूप में है।
ConcurrentHashMap
के लिए, ताले एक हैशप बाल्टी स्तर पर हो सकते हैं।निचले स्तर के लॉकिंग का प्रभाव यह है कि आप समवर्ती पाठकों और लेखकों के साथ मिल सकते हैं जो सिंक्रनाइज़ किए गए संग्रह के लिए संभव नहीं है। इससे अधिक स्केलेबिलिटी होती है।
ConcurrentHashMap
ConcurrentModificationException
फेंक नहीं देता है अगर एक थ्रेड इसे संशोधित करने का प्रयास करता है जबकि दूसरा इसे चालू कर रहा है।
यह आलेख Java 7: HashMap vs ConcurrentHashMap एक बहुत अच्छा पढ़ा है। अत्यधिक सिफारिशित।
संक्षिप्त उत्तर:
दोनों नक्शे Map
इंटरफ़ेस का धागा सुरक्षित कार्यान्वयन हैं। ConcurrentHashMap
उन मामलों में उच्च थ्रूपुट के लिए लागू किया गया है जहां उच्च सहमति की अपेक्षा की जाती है।
ConcurrentHashMap
के पीछे विचार पर ब्रायन गोएट्ज़ का article बहुत अच्छा पढ़ा गया है। अत्यधिक सिफारिशित।
तब यह क्या है? HashMap: ध्यान दें कि यह कार्यान्वयन सिंक्रनाइज़ नहीं कर रहा है मानचित्र को आकस्मिक अनसिंक्रनाइज़्ड उपयोग रोकने के लिए: 'मानचित्र मीटर = Collections.synchronizedMap (नई HashMap (...));' http: // डॉक्स। oracle.com/javase/7/docs/api/java/util/HashMap.html – karate
"ब्रायन गोएट्ज़ का लेख ... बहुत अच्छा पढ़ा गया है।" - और यहां तक कि उनकी "जावा कंसुरेंसी इन प्रैक्टिस" पुस्तक भी है। –
ConcurrentHashMap
पूरे मानचित्र को सिंक्रनाइज़ किए बिना थ्रेड सुरक्षित है। लॉक के साथ लिखते समय पढ़ना बहुत तेज़ हो सकता है।
ConcurrentHashMap
lock stripping
के रूप में ज्ञात फाइनर-ग्रेनेड लॉकिंग तंत्र का उपयोग करता है ताकि साझा की जाने वाली अधिक डिग्री की अनुमति मिल सके। इसके कारण यह बेहतर समवर्ती और स्केलेबिलिटी प्रदान करता है।
इसके अलावा ConcurrentHashMap
के लिए लौट आए Iterators दुर्बलता से लगातार बजाय के तेजी से तकनीक समन्वयित HashMap द्वारा प्रयोग किया जाता असफल रहे हैं।
SynchronizedMap
पर विधियों को ऑब्जेक्ट पर लॉक रखें, जबकि ConcurrentHashMap
में "लॉक स्ट्रिपिंग" की एक अवधारणा है जहां ताले सामग्री के बाल्टी पर रखे जाते हैं। इस प्रकार स्केलेबिलिटी और प्रदर्शन में सुधार हुआ।
ConcurrentHashMap:
1) दोनों नक्शे मानचित्र इंटरफ़ेस का धागा सुरक्षित कार्यान्वयन हैं।
2) समवर्ती हैशैप उन मामलों में उच्च थ्रूपुट के लिए लागू किया गया है जहां उच्च सहमति की अपेक्षा की जाती है।
3) ऑब्जेक्ट स्तर में कोई लॉकिंग नहीं है।
समन्वयित हैश नक्शा:
1) प्रत्येक विधि एक वस्तु के स्तर का ताला का उपयोग कर समन्वयित है।
दोनों अपनी मूल कार्यक्षमता और उनकी आंतरिक संरचना में अंतर के साथ हैश मैप के सिंक्रनाइज़ संस्करण हैं।
ConcurrentHashMap आंतरिक सेगमेंट शामिल है जिसे स्वतंत्र हैशमैप्स के रूप में देखा जा सकता है। ऐसे सभी सेगमेंट को उच्च समवर्ती निष्पादन में अलग थ्रेड द्वारा लॉक किया जा सकता है। तो, एकाधिक थ्रेड एक दूसरे के लिए अवरुद्ध/प्रतीक्षा किए बिना ConcurrentHashMap से कुंजी-मूल्य जोड़े प्राप्त/रख सकते हैं। यह उच्च थ्रूपुट के लिए लागू किया गया है।
जबकि
Collections.synchronizedMap(), हम HashMap की एक सिंक्रनाइज़ संस्करण प्राप्त है और यह तरीके से रोकने में पहुँचा जा सकता है। इसका अर्थ यह है कि यदि एकाधिक थ्रेड एक ही समय में सिंक्रनाइज़ किए गए मैप तक पहुंचने का प्रयास करते हैं, तो उन्हें सिंक्रनाइज़ तरीके से एक समय में कुंजी-मूल्य जोड़े को प्राप्त/रखने की अनुमति होगी।
हम दोनों ConcurrentHashMap और सिंक्रनाइज़ हैशमैप का उपयोग कर थ्रेड सुरक्षा प्राप्त कर सकते हैं। लेकिन यदि आप उनके वास्तुकला को देखते हैं तो बहुत अंतर होता है।
- synchronisedHashmap
यह वस्तु स्तर पर ताला बनाए रखेगा। इसलिए यदि आप किसी भी ऑपरेशन को करना/प्राप्त करना चाहते हैं तो आपको पहले लॉक प्राप्त करना होगा। उसी समय, अन्य धागे को किसी भी ऑपरेशन करने की अनुमति नहीं है। तो एक समय में, केवल एक धागा इस पर काम कर सकता है। तो प्रतीक्षा समय यहां बढ़ेगा। हम कह सकते हैं कि जब आप ConcurrentHashMap की तुलना करते हैं तो प्रदर्शन अपेक्षाकृत कम होता है।
- ConcurrentHashMap
यह खंड स्तर पर ताला बनाए रखेगा। इसमें 16 खंड हैं और कुल मिलाकर 16 के रूप में समवर्ती स्तर को बनाए रखते हैं। तो एक समय में, 16 धागे ConcurrentHashMap पर काम करने में सक्षम हो सकते हैं। इसके अलावा, पढ़ना ऑपरेशन को लॉक की आवश्यकता नहीं है। तो किसी भी धागे पर एक ऑपरेशन कर सकते हैं।
thread1 खंड 2 और thread2 में डाल कार्रवाई करने के लिए चाहता है खंड 4 फिर इसे यहां की अनुमति दी है पर डाल कार्रवाई करने के लिए चाहता है। मतलब, 16 थ्रेड एक समय में ConcurrentHashMap पर अपडेट (डाल/हटाएं) ऑपरेशन कर सकते हैं।
ताकि प्रतीक्षा समय यहां कम होगा। इसलिए प्रदर्शन सिंक्रनाइज़ हैशमैप से अपेक्षाकृत बेहतर है।
ConcurrentHashMap आंकड़ों के समवर्ती उपयोग की अनुमति देता। पूरा नक्शा खंडों में बांटा गया है।
ऑपरेशन पढ़ें यानी। get(Object key)
सेगमेंट स्तर पर भी सिंक्रनाइज़ नहीं किया गया है।
लेकिन ऑपरेशन लिखें यानी। remove(Object key), get(Object key)
सेगमेंट स्तर पर लॉक प्राप्त करें। पूरे मानचित्र का केवल एक हिस्सा लॉक है, अन्य धागे अभी भी लॉक किए गए को छोड़कर विभिन्न सेगमेंट से मूल्य पढ़ सकते हैं।
सिंक्रनाइज़मैप दूसरी ओर, ऑब्जेक्ट स्तर पर लॉक प्राप्त करें। ऑपरेशन के बावजूद सभी धागे मौजूदा धागे की प्रतीक्षा करनी चाहिए (पढ़ें/लिखें)।
- 1. अस्थिर हैश मैप बनाम ConcurrentHashMap
- 2. जावा हैश मैप बनाम JSONObject
- 3. जावा सिंक्रनाइज़ ब्लॉक बनाम संग्रह। सिंक्रनाइज़ किए गए मैप
- 4. जावा कंसूरेंट हैश मैप
- 5. ConcurrentHashMap बनाम putIfAbsent
- 6. हैश मैप
- 7. हैश मैप
- 8. हैश मैप
- 9. हैश मैप
- 10. हैश मैप
- 11. हैश मैप
- 12. हैश मैप
- 13. हैश मैप
- 14. ConcurrentHashMap मेमोरी ओवरहेड
- 15. ConcurrentHashMap
- 16. क्या ConcurrentHashMap के साथ कोई कमी है?
- 17. समवर्ती हैश मैप: चेकिंग आकार
- 18. cudaStream सिंक्रनाइज़ बनाम CudaDevice सिंक्रनाइज़ बनाम cudaThread सिंक्रनाइज़
- 19. सिंक्रनाइज़ (यह) बनाम सिंक्रनाइज़ (MyClass.class)
- 20. ConcurrentHashMap
- 21. ऐरेलिस्ट या हैश मैप
- 22. NullPointerException हैश मैप
- 23. AutoCompleteTextView onItem हैश मैप
- 24. कस्टम हैश मैप कार्यान्वयन
- 25. हैश मैप सीरियलज़ेबिलिटी
- 26. जावा, हैश मैप
- 27. हैश मैप डी-सीरियलाइजेशन
- 28. हैश मैप कुंजी
- 29. हैश मैप को ArrayList
- 30. हैशसेट/हैश मैप जावा
तो 'हैशटेबल' और 'सिंक्रनाइज़ हैश मैप' के बीच क्या अंतर है? – roottraveller
एक समवर्ती हैश मैप और एक सिंक्रनाइज़ हैश मैप के बीच, आप किसकी सिफारिश करते हैं? – Blunderchips