एक्सेस किए जा रहे मैं एक सूची वस्तु से अधिक थ्रेड द्वारा पहुँचा जा रहा है। ज्यादातर एक धागा है, और कुछ स्थितियों में दो धागे, जो सूची अद्यतन करते हैं। संसाधित किए जा रहे उपयोगकर्ता अनुरोधों की संख्या के आधार पर, एक से पांच धागे हैं जो इस सूची से पढ़ सकते हैं। सूची निष्पादित करने के कार्यों की कतार नहीं है, यह डोमेन ऑब्जेक्ट्स की एक सूची है जिसे पुनर्प्राप्त और अद्यतन किया जा रहा है।
प्रयोग सिंक्रनाइज़ ब्लॉक
प्रयोग सामान्य लॉक (यानी पढ़ने और लिखने ऑप्स का हिस्सा ही लॉक)
प्रयोग ReadWriteLock:बेस्ट दृष्टिकोण एक सूची के लिए जावा 6 में उपयोग करने के लिए समवर्ती
अब इस सूची धागा सुरक्षित करने के लिए उपयोग करने के लिए कई तरीके हैं
प्रयोग नया ConcurrentBLABLBA संग्रह वर्गों में से एक
मेरा प्रश्न:
क्या उपयोग करने के लिए इष्टतम दृष्टिकोण, यह देखते हुए है कि cricital वर्गों आमतौर पर आपरेशन का एक बहुत (ज्यादातर सिर्फ जोड़ने/हटाने के/डालने या सूची से तत्वों हो रही) शामिल नहीं है?
क्या आप ऊपर सूचीबद्ध नहीं, एक और दृष्टिकोण की सिफारिश कर सकते हैं?
कुछ constrains
-optimal प्रदर्शन महत्वपूर्ण है, स्मृति उपयोग इतना नहीं
-यह एक आदेश दिया सूची (वर्तमान में एक ArrayList पर सिंक्रनाइज़ किया जा रहा), होना चाहिए, हालांकि नहीं एक क्रमबद्ध सूची (यानी का प्रयोग कर नहीं तुलनात्मक या तुलनात्मक, लेकिन सम्मिलन आदेश के अनुसार)
- सूची बड़ी होगी, जिसमें 100000 डोमेन ऑब्जेक्ट्स शामिल हैं, इस प्रकार CopyOnWriteArrayList की तरह कुछ उपयोग नहीं किया जा सकता है
- लिखने/अपडेट क्रिटिकल अनुभाग आमतौर पर बहुत तेज़ होते हैं, सरल जोड़ते हैं/हटाएं/डालें या बदलें (सेट)
पढ़ संचालन मुख्य रूप से एक elementAt (इंडेक्स) करना होगा समय के सबसे अधिक फोन -इस, हालांकि कुछ पढ़ने के संचालन एक द्विआधारी खोज, या indexOf (तत्व) कर सकता
-नहीं सूची पर सीधा यात्रा हालांकि आपरेशन की तरह किया जाता है, indexOf (..) सूची पार किए जाने
मुझे ConcurrentSkipListMap विचार पसंद है। 90% समय में सूची को कुछ टाइमस्टैम्प (प्रत्येक डोमेन ऑब्जेक्ट की आईडी का हिस्सा) के अनुसार क्रमबद्ध किया जाता है, इसलिए शायद इसके लिए अनुकूलन करना उचित है। अभी भी अन्य 10% के बारे में सोचेंगे। –