2012-02-19 27 views
6

बनाने के लिए सबसे प्रभावी तरीका मेरे पास एक साझा नक्शा डेटा संरचना है जिसे थ्रेड-सुरक्षित होना आवश्यक है। मानचित्र को पढ़ने या जोड़ने के लिए सबसे प्रभावी तरीका सिंक्रनाइज़ किया गया है?डेटा संरचना थ्रेड-सुरक्षित (जावा)

धन्यवाद!

संपादित करें: डेटा संरचना एक गैर-अद्यतन करने योग्य कैश है, यानी यह भरने के बाद यह कैश अपडेट नहीं करता है। तो शुरुआती रूप से कुछ पढ़ते हुए लिखते हैं तो यह ज्यादातर

उत्तर

6

"सबसे कुशल" निश्चित रूप से सापेक्ष है, और आपकी विशिष्ट स्थिति पर निर्भर करता है। लेकिन ConcurrentHashMap जैसे कुछ पर विचार करें यदि आप उम्मीद करते हैं कि मानचित्र के साथ-साथ कई धागे काम कर रहे हों; यह थ्रेड सुरक्षित है लेकिन फिर भी Hashtable या Collections.synchronizedMap() के विपरीत, समवर्ती पहुंच की अनुमति देता है।

0

सिंक्रनाइज़ किए गए तरीके या संग्रह निश्चित रूप से काम करेंगे। यह सबसे कुशल दृष्टिकोण नहीं है लेकिन कार्यान्वित करना आसान है और आप ओवरहेड को तब तक नहीं देख पाएंगे जब तक आप प्रति सेकंड लाखों बार संरचना तक पहुंच नहीं पाते।

एक बेहतर विचार हालांकि ConcurrentHashMap का उपयोग करना हो सकता है - यह शुरुआत से समेकन के लिए डिज़ाइन किया गया था और अत्यधिक समवर्ती स्थिति में बेहतर प्रदर्शन करना चाहिए।

3

यह इस बात पर निर्भर करता है कि आप ऐप में इसका उपयोग कैसे करते हैं। (के बाद से

आप पढ़ता है की बहुत सारी कर रही है और उस पर लिखते रहे हैं, एक ConcurrentHashMap संभवतः सबसे अच्छा विकल्प है, अगर यह ज्यादातर पढ़ रही, एक आम मानचित्र एक ReadWriteLock का उपयोग कर एक संग्रह के अंदर लिपटे है राईट आम नहीं होगा, तो आप लिखने के दौरान केवल तेज़ पहुंच और लॉकिंग प्राप्त करें)।

संग्रह। सिंक्रनाइज़मैप() संभवतः सबसे खराब मामला है, क्योंकि यह आपको सिंक्रनाइज़ किए गए सभी तरीकों के साथ एक रैपर दे सकता है, इसे हर कीमत से बचें।

1

अपने विशिष्ट उपयोग केस (गैर-अद्यतन करने योग्य कैश) के लिए, लिखने वाले मानचित्र पर एक प्रति सिंक्रनाइज़ किए गए मानचित्र और ConcurrentHashMap दोनों को बेहतर प्रदर्शन करेगी।

देखें: https://labs.atlassian.com/wiki/display/CONCURRENT/CopyOnWriteMap एक उदाहरण के रूप में (मुझे विश्वास है कि अपाचे में लेखन मानचित्र कार्यान्वयन पर एक प्रति भी है)।

+0

लिंक बदल गया है - https://bitbucket.org/atlassian/atlassian-util-concurrent/wiki/CopyOnWrite%20 मैप्स –

संबंधित मुद्दे