सिंक्रोनाइज़्ड ब्लॉक बनाम Collections.synchronizedMap () में हैश मैप में क्या अंतर है।

HashMap<String,String> hm = new HashMap<String,String>();
hm.put("key1","value1");
hm.put("key2","value2");
synchronized(hm)
{
   // Thread safe operation
}

Map<String, String> synchronizedMap = Collections.synchronizedMap(hm);
// Use synchronizedMap for Thread safe concurrent operation 

इन दोनों में से कौन बेहतर है?

2
RCS 25 सितंबर 2017, 06:30

2 जवाब

सबसे बढ़िया उत्तर

सिंक्रोनाइज़्ड मैप विधि का उपयोग करना अधिक सुविधाजनक और सुरक्षित है क्योंकि आप जानते हैं कि मानचित्र के सभी एक्सेस सुरक्षित रहेंगे (जब तक आप सीधे एचएम पर कॉल करके इसे बायपास नहीं करते हैं)।

लेकिन सिंक्रोनाइज़्ड ब्लॉक का उपयोग करने से आपको कई स्टेटमेंट्स पर लॉक को होल्ड करके, लॉकिंग की ग्रैन्युलैरिटी को नियंत्रित करने की क्षमता मिलती है, जिसकी सिंक्रोनाइज़्ड मैप विकल्प अनुमति नहीं देता है।

इसलिए यदि आपको अन्य थ्रेड्स से कॉल के साथ इंटरलीव किए बिना निष्पादित करने के लिए एकाधिक कथनों की आवश्यकता है, तो आपको सिंक्रनाइज़ किए गए ब्लॉक चुनना होगा (या फिर ConcurrentHashMap जैसे कुछ पर स्विच करें यदि आप putIfAbsent या इसी तरह की कार्यक्षमता की तरह कुछ ढूंढ रहे हैं)। यदि आपको इसकी आवश्यकता नहीं है, तो सिंक्रनाइज़ मैप आसान है।

1
Nathan Hughes 25 सितंबर 2017, 07:05

वे वही हैं। हालांकि, synchronizedMap(), खुद को सिंक करने की तुलना में कहीं अधिक आसान है।

1
NRitH 25 सितंबर 2017, 06:33