में संग्रहीत परमाणु रूप से बढ़ते काउंटर वेब मैप में विभिन्न स्थानों से कुछ मीट्रिक एकत्र करना चाहते हैं। इसे सरल रखने के लिए, ये सभी काउंटर होंगे और इसलिए एकमात्र संशोधक ऑपरेशन उन्हें 1ConcurrentHashMap
वृद्धि को समवर्ती और अक्सर समझा जाएगा। पढ़ता है (आंकड़े डंपिंग) एक दुर्लभ ऑपरेशन है।
मैं ConcurrentHashMap का उपयोग करने के बारे में सोच रहा था। मुद्दा यह है कि काउंटर सही ढंग से वृद्धि कैसे करें। चूंकि मानचित्र में "वृद्धि" ऑपरेशन नहीं है, इसलिए मुझे पहले वर्तमान मान को पढ़ने की आवश्यकता है, मानचित्र में नया मान डालने से इसे बढ़ाएं। अधिक कोड के बिना, यह एक परमाणु ऑपरेशन नहीं है।
यह तुल्यकालन के बिना इस लक्ष्य को हासिल करने के लिए (जो ConcurrentHashMap का उद्देश्य विफल हो जाएगा) संभव है? क्या मुझे Guava देखने की आवश्यकता है?
किसी भी पॉइंटर्स के लिए धन्यवाद।
पीएस
वहाँ ऐसा (Most efficient way to increment a Map value in Java), लेकिन प्रदर्शन और नहीं बहु सूत्रण
अद्यतन
एक ही विषय पर खोजों के माध्यम से यहां पहुंचने के उन लोगों के लिए पर ध्यान केंद्रित पर एक संबंधित सवाल यह है: नीचे दिए गए उत्तर के अलावा, वहाँ एक उपयोगी है presentation जो आकस्मिक रूप से एक ही विषय को शामिल करता है। स्लाइड्स 24-33 देखें।
बस एक में 'HashMap' स्टोर करने के लिए मत भूलना 'अंतिम' सदस्य और मानचित्र को 'unmodifiable' wrapper में बेहतर लपेटें। अभी तक बेहतर, आप अमरूद से 'इमटेबल मैप' का उपयोग कर सकते हैं (Google संग्रह के सुपरसेट) और यह वास्तव में वास्तव में तेज़ होना चाहिए। –
@Zwei: अच्छा बिंदु, उस सलाह को शामिल करने के लिए उत्तर संपादित किया गया :) –
मेट्रिक्स की सूची डेटा की आपूर्ति के रूप में बनाई गई है (यानी नक्शा की चाबियाँ सिस्टम रन के रूप में जोड़ दी जाएंगी और विभिन्न संग्रह बिंदु प्रभावित होंगे; सूची बनाना प्राथमिकता त्रुटि-प्रवण होगी)। मैं परमाणु लोंग की वृद्धि और भूल गया(), यह वही है जो मुझे चाहिए। यदि यह अस्तित्व में नहीं था, तो मैं सोच रहा था कि मेट्रिक्स कलेक्टरों के लिए काउंटर बढ़ाने के लिए एक और दृष्टिकोण नहीं था, लेकिन सिंगलटन द्वारा बनाए गए कतार में ऐसा करने के लिए अनुरोध जोड़ने के लिए। इस प्रकार, कॉलर्स केवल एक सूची में() जोड़ते हैं, जो समय-समय पर पढ़ा जाता है और संसाधित होता है। हालांकि, उतना आसान नहीं है। – wishihadabettername