Vector
प्रत्येक व्यक्तिगत ऑपरेशन पर सिंक्रनाइज़ करता है। यह लगभग कभी नहीं है कि आप क्या करना चाहते हैं।
आम तौर पर आप संचालन के एक पूरे अनुक्रम को सिंक्रनाइज़ करना चाहते हैं । व्यक्तिगत संचालन को सिंक्रनाइज़ करना दोनों कम सुरक्षित है (यदि आप Vector
उदाहरण के लिए, इस पर पुनरावृति करते हैं , तो आपको उसी समय संग्रह को बदलने से किसी और से बचने के लिए ताला निकालने की आवश्यकता होती है, जो ConcurrentModificationException
पुनरावृति धागे में एक कारण होगा ) लेकिन धीमी भी ( क्यों बार-बार ताला हटाओगे जब एक बार पर्याप्त होगा)?
बेशक, इसमें लॉकिंग का ओवरहेड भी है, जब आपको ज़रूरत नहीं है।
मूल रूप से, यह ज्यादातर स्थितियों में सिंक्रनाइज़ेशन के लिए एक बहुत ही त्रुटिपूर्ण दृष्टिकोण है। जैसा कि श्री ब्रायन हेंक ने बताया है, आप कॉल का उपयोग करके एक संग्रह को सजा सकते हैं जैसे Collections.synchronizedList
- यह तथ्य कि Vector
"रिसाइज्ड सरणी" संग्रह कार्यान्वयन दोनों को "हर ऑपरेशन को सिंक्रनाइज़ करें" बिट के साथ संयोजन करता है, खराब डिजाइन का एक और उदाहरण है; सजावट दृष्टिकोण क्लीनर को चिंताओं से अलग करता है।
एक के रूप में Stack
बराबर - मैं देखो चाहते हैं Deque
/ ArrayDeque
के साथ शुरू करने के लिए।