ConcurrentHashMap एक क्लास है जिसे JDK 1.5 में पेश किया गया था। ConcurrentHashMap मैप में जोड़ते या अपडेट करते समय केवल बकेट लेवल पर लॉक लगाता है जिसे फ्रैगमेंट कहा जाता है। इसलिए, ConcurrentHashMap मैप पर कनकरेंट रीड और राइट ऑपरेशन की अनुमति देता है।
Synchronized HashMap (Collections.synchronizedMap()) कलेक्शन फ्रेमवर्क का एक मेथड है। यह मेथड पूरे कलेक्शन पर लॉक लगाता है। इसलिए, यदि एक थ्रेड मैप को एक्सेस कर रहा है तो कोई अन्य थ्रेड उसी मैप को एक्सेस नहीं कर सकता।
| क्र.सं. | मुख्य बिंदु | ConcurrentHashMap | Synchronized HashMap |
|---|---|---|---|
| 1 | इम्प्लीमेंटेशन | यह एक क्लास है जो ConcurrentMap और Serializable इंटरफेस को इम्प्लीमेंट करती है | यह Collection क्लास में एक मेथड है |
| 2 | लॉक मैकेनिज्म | केवल पोर्शन (बकेट/सेगमेंट) को लॉक करता है | पूरे मैप को लॉक करता है |
| 3 | परफॉरमेंस | ConcurrentHashMap कनकरेंट रीड और राइट की अनुमति देता है। इसलिए परफॉरमेंस सिंक्रोनाइज्ड मैप की तुलना में अपेक्षाकृत बेहतर है | मल्टीपल थ्रेड्स मैप को कनकरेंटली एक्सेस नहीं कर सकते। इसलिए परफॉरमेंस ConcurrentHashMap की तुलना में अपेक्षाकृत कम है |
| 4 | नल की | यह नल को की या वैल्यू के रूप में अनुमति नहीं देता | यह नल को की के रूप में अनुमति देता है |
| 5 | कनकरेंट मॉडिफिकेशन एक्सेप्शन | यह कनकरेंट मॉडिफिकेशन एक्सेप्शन नहीं थ्रो करता | सिंक्रोनाइज्ड मैप द्वारा रिटर्न किया गया इटरेटर कनकरेंट मॉडिफिकेशन एक्सेप्शन थ्रो करता है |
SynchronizedMap का उदाहरण
public class SynchronizedMapExample {
public static void main(String[] args) {
Map<Integer, String> laptopmap = new HashMap<>();
laptopmap.put(1, "IBM");
laptopmap.put(2, "Dell");
laptopmap.put(3, "HCL");
// सिंक्रोनाइज्ड मैप बनाएं
Map<Integer, String> syncmap = Collections.synchronizedMap(laptopmap);
System.out.println("Synchronized map is: " + syncmap);
}
}
ConcurrentHashMap का उदाहरण
public class ConcurrentHashMapExample {
public static void main(String[] args) {
Map<Integer, String> laptopmap = new ConcurrentHashMap<>();
laptopmap.put(1, "IBM");
laptopmap.put(2, "Dell");
laptopmap.put(3, "HCL");
System.out.println("ConcurrentHashMap is: " + laptopmap);
}
}
आंतरिक कार्यप्रणाली (Java 8+)
- ConcurrentHashMap: CAS (Compare-And-Swap) ऑपरेशन्स और सिंक्रोनाइज्ड ब्लॉक्स का उपयोग करता है, सेगमेंट्स की अवधारणा हटा दी गई
- SynchronizedMap: सभी ऑपरेशन्स के लिए सिंगल म्यूटेक्स (this मॉनिटर) का उपयोग करता है
कब किसका उपयोग करें?
- ConcurrentHashMap: हाई कनकरेंसी एनवायरनमेंट, बेहतर परफॉरमेंस, नल की/वैल्यू की आवश्यकता न हो
- SynchronizedMap: लो कनकरेंसी, नल की/वैल्यू की आवश्यकता हो, सिंपल यूज केस