जावा मानक पुस्तकालय में सबसे अधिक संग्रह के प्रलेखन जैसे ConcurrentLinkedQueue, ConcurrentLinkedDequeue और ConcurrentSkipListSet निम्न अस्वीकरण के साथ आते हैं:समवर्ती संग्रह आकार गणना
कि खबरदार, सबसे संग्रह में विपरीत, आकार विधि नहीं एक है निरंतर समय ऑपरेशन। इन सेट की असीमित प्रकृति की वजह से, तत्वों की वर्तमान संख्या को निर्धारित करने के लिए तत्वों के एक ट्रैवर्सल की आवश्यकता होती है, और यदि यह संग्रह ट्रैवर्सल के दौरान संशोधित किया गया है तो गलत परिणाम रिपोर्ट कर सकते हैं।
इसका क्या अर्थ है? वे काउंटर क्यों नहीं रख सकते (कहें, AtomicInteger) और केवल size()
पर कॉल पर मान वापस करें?
ऐसा इसलिए है क्योंकि काउंटर को सिंक्रनाइज़ किया जाना चाहिए और इसलिए एक चोक पॉइंट बनाता है?
एक साइड नोट के रूप में, ConcurrentHashMap में यह समस्या प्रतीत नहीं होती है। ऐसा क्यों है? स्रोत कोड को देखते हुए, ऐसा लगता है कि यह size()
पर कॉल पर सम्मिलित किए गए सरणी में रखे गए कई काउंटर का उपयोग करता है। क्या यह चोक पॉइंट को बाधित करने के लिए है या कोई और कारण है?
एक परमाणु काउंटर निश्चित रूप से खराब होगा। – ZhongYu