आपको वास्तव में जावा के वेक्टर के थ्रेड सुरक्षा को वर्गीकृत करने की आवश्यकता है। जावा वेक्टर कई धागे से उपयोग किया जा सकता है क्योंकि यह विधियों पर सिंक्रनाइज़ेशन का उपयोग करता है। राज्य दूषित नहीं होगा।
हालांकि, जावा के वेक्टर की उपयोगिता अतिरिक्त सिंक्रनाइज़ेशन के बिना एकाधिक धागे से सीमित है। उदाहरण के लिए, इस विधि भ्रष्ट नहीं होगा वेक्टर के राज्य एक वेक्टर
Vector vector = getVector();
if (vector.size() > 0) {
object first = vector.get(0);
}
से एक तत्व पढ़ने के सरल कार्य पर विचार करें, लेकिन यह भी सही नहीं है। यदि कथन() कॉल के बीच वेक्टर को म्यूट करने से दूसरे धागे को रोकना कुछ भी नहीं है। यह कोड अंततः दौड़ की स्थिति के कारण विफल हो सकता है।
इस प्रकार का सिंक्रनाइज़ेशन केवल कुछ हद तक परिदृश्यों में उपयोगी है और यह निश्चित रूप से सस्ता नहीं है। यदि आप एकाधिक धागे का उपयोग नहीं करते हैं तो भी आप सिंक्रनाइज़ेशन के लिए एक उल्लेखनीय मूल्य का भुगतान करते हैं।
.Net ने केवल सीमित उपयोगिता के परिदृश्य के लिए डिफ़ॉल्ट रूप से इस कीमत का भुगतान नहीं करना चुना। इसके बजाए इसे लॉक फ्री लिस्ट को लागू करना चुना गया। लेखक किसी भी सिंक्रनाइज़ेशन को जोड़ने के लिए ज़िम्मेदार हैं। यह सी ++ के मॉडल के करीब है "आप जो भी उपयोग करते हैं उसके लिए भुगतान करें"
मैंने हाल ही में जावा के वेक्टर जैसे आंतरिक सिंक्रनाइज़ेशन के साथ संग्रह का उपयोग करने के खतरों पर कुछ लेख लिखे हैं।
संदर्भ वेक्टर धागा सुरक्षा: http://www.ibm.com/developerworks/java/library/j-jtp09263.html
उपयोग करने के लिए MSDN [ArrayList] (http://msdn.microsoft.com/en-us/library/system.collections के अनुसार प्रदान करता है। arraylist.aspx # threadSafetyToggle) और [सूची (टी का)] (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx#threadSafetyToggle) एक ही थ्रेड सुरक्षा है। 'ArrayList' [सिंक्रनाइज़] प्रदान करता है (http://msdn.microsoft.com/en-us/library/system.collections.arraylist.synchronized.aspx) रैपर हालांकि। –