Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Java

जावा में ConcurrentHashMap और Synchronized HashMap के बीच अंतर

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: लो कनकरेंसी, नल की/वैल्यू की आवश्यकता हो, सिंपल यूज केस
  1. - जावा में TreeSet और HashSet के बीच अंतर

    HashSet और TreeSet दोनों कलेक्शन फ्रेमवर्क से संबंधित हैं। HashSet Set इंटरफेस का इम्प्लीमेंटेशन है जबकि TreeSet SortedSet को इम्प्लीमेंट करता है। TreeSet TreeMap द्वारा समर्थित है जबकि HashSet HashMap द्वारा समर्थित है। क्र.सं. मुख्य बिंदु HashSet TreeSet 1 इम्प्लीमेंटेशन HashSet, HashTable

  1. - जावा में Iterator और Enumeration के बीच अंतर

    Iterator और Enumeration दोनों कलेक्शन से एलिमेंट्स को ट्रैवर्स और एक्सेस करने के लिए कर्सर हैं। वे दोनों कलेक्शन फ्रेमवर्क से संबंधित हैं। Enumeration JDK 1.0 में जोड़ा गया था और Iterator JDK 1.2 वर्जन में कलेक्शन फ्रेमवर्क में जोड़ा गया। Enumeration कलेक्शन में स्ट्रक्चरल चेंज नहीं कर सकता क्योंकि

  1. - Java में ArrayList और HashSet के बीच अंतर

    HashSet और ArrayList दोनों Java कलेक्शन फ्रेमवर्क के सबसे महत्वपूर्ण क्लासेस में से कुछ हैं।ArrayList और HashSet के बीच महत्वपूर्ण अंतर निम्नलिखित हैं।क्रमांकमुख्य बिंदुArrayListHashSet1कार्यान्वयनArrayList लिस्ट इंटरफेस का कार्यान्वयन है।दूसरी ओर HashSet सेट इंटरफेस का कार्यान्वयन है।2आंतरिक कार्या