threadsafty के साथ क्रमबद्ध concurrentHash नक्शा-जावा, multithreading, संग्रह, concurrenthashmap

मैं अपने "बहुप्रचारित" एप्लिकेशन में "concurrentHashMap" का उपयोग कर रहा हूं। मैं इसे वर्णन के रूप में क्रमबद्ध करने में सक्षम था यहाँ। लेकिन चूंकि मैं हैशप को एक सूची में परिवर्तित कर रहा हूंthred safty के बारे में थोड़ा चिंतित हूँ। मेरा "ConcurrentHashMap" एक स्थिर चर है इसलिए मैं गारंटी दे सकता हूं कि इसका केवल एक उदाहरण होगा। लेकिन जब मैं इसे सॉर्ट करने जा रहा हूं, तो मैं इसे एक सूची में बदल देता हूं, और फिर इसे एक नए समवर्ती हैश मैप पर डाल देता हूं।

क्या यह बहु-थ्रेडिंग एनलिविमेंट में एक अच्छा अभ्यास है?

कृपया मुझे अपने विचार और सुझाव बताएं।

पहले ही, आपका बहुत धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 6

आपको एक का उपयोग करना चाहिए ConcurrentSkipListMap। यह थ्रेड-सुरक्षित, तेज़ है और ऑब्जेक्ट के तुलनीय कार्यान्वयन के अनुसार ऑर्डरिंग बनाए रखता है।


उत्तर № 2 के लिए 1

यदि आप इसे बहुत कुछ नहीं बदलते हैं और जो भी आप चाहते हैं उसे हल करना है, तो आपको इसका उपयोग करना चाहिए ट्री-मैप ** ** द्वारा लिपटेCollections.synchronizedMap () कॉल

आपका कोड ऐसा कुछ होगा:

public class YourClass {
public static final Map<Something,Something> MAP = Collections.synchronizedMap( new TreeMap<Something,Something>() );
}

जवाब के लिए 0 № 3

मेरा "ConcurrentHashMap" इसलिए एक स्थिर चर हैमैं गारंटी दे सकता हूं कि इसका केवल एक उदाहरण होगा। लेकिन जब मैं इसे सॉर्ट करने जा रहा हूं, तो मैं इसे एक सूची में बदल देता हूं, और फिर इसे एक नए समवर्ती हैश मैप पर डाल देता हूं।

यह एक साधारण समस्या नहीं है।

मैं आपको एक तथ्य के लिए बता सकता हूं कि एक ConcurrentHashMap का उपयोग करके यह धागा सुरक्षित नहीं है। न ही एक का उपयोग करेगा synchronizedMap आवरण। समस्या यह है कि सॉर्टिंग एक परमाणु ऑपरेशन के रूप में समर्थित नहीं है। इसके बजाय इसमें मैप एपीआई ऑपरेशंस का एक अनुक्रम शामिल है, शायद उनके बीच महत्वपूर्ण समय अंतराल के साथ।

मैं इसे हल करने के लिए दो दृष्टिकोणों के बारे में सोच सकता हूं:

  • कुंजी को क्रम में रखने वाले मानचित्र का उपयोग करके पहले स्थान पर सॉर्ट करने की आवश्यकता से बचें; जैसे ConcurrentSkipListMap का उपयोग करें।

  • सिंक्रनाइज़ किए गए कस्टम सिंक्रनाइज़ रैपर क्लास में मैप क्लास को लपेटें sort तरीका। इस दृष्टिकोण के साथ समस्या यह है कि आप ConcurrentHashMap का उपयोग कर से जुड़ी समेकन बाधा को फिर से पेश करने की संभावना है।


और यह ध्यान देने योग्य है कि यह किसी को हल करने के लिए कोई समझ नहीं आता है HashMap या ए ConcurrentHashMap क्योंकि ये मानचित्र उस क्रम को संरक्षित नहीं करेंगे जिसमें आप तत्वों को सॉर्ट करते हैं। आप एक का उपयोग कर सकते हैं LinkedHashMap, जो प्रवेश सम्मिलन आदेश को संरक्षित करता है।


संबंधित सवाल
सबसे लोकप्रिय