मिल रहा है मैं बहु-थ्रेडेड वातावरण में एक सूची सुरक्षित करने के लिए ArrayList
के बजाय Vector
का उपयोग कर रहा हूं। लेकिन जब मैं इसे Vector
में आइटम जोड़ने की कोशिश करता हूं तो मैं ConcurrentModificationException
प्राप्त करता रहता हूं। वह क्यों है और मैं इसे कैसे रोक सकता हूं?मैंने सिंक्रनाइज़ सूची का उपयोग किया, और मुझे अभी भी ConcurrentModificationException
उत्तर
आप इसे फिर से सक्रिय करते समय वेक्टर को संशोधित नहीं कर सकते हैं। आइटम्स को एक अलग वेक्टर में जोड़ने के लिए स्टोर करें, और उन्हें वेक्टर में ले जाएं जब लूप समाप्त हो या मूल वेक्टर की एक प्रतिलिपि पर लूप हो।
जोड़ा: जावा में वेक्टर के चारों ओर एक म्युटेक्स पाने के लिए, दोनों कार्यों में ऐसा करते हैं:
synchronized (list) {
// modifying list
}
और:
synchronized (list) {
// iterating over list
}
बेशक
मैं मान लिया है कि सूची में नाम है list
यदि आप आइटम को पुन: जोड़ना चाहते हैं, तो आप ListIterator
का उपयोग करना चाहेंगे। Vector
का उपयोग करके, आप इस नियम को बाईपास नहीं कर रहे हैं (स्पष्ट रूप से), इसलिए मैं इसके बजाय ArrayList
का उपयोग करने की अनुशंसा करता हूं।
यदि आपको अपनी सूची में पुनरावृत्ति करने और एक साथ जोड़ने की आवश्यकता है, तो आपको CopyOnWriteArrayList
जैसी समवर्ती सूची का उपयोग करना चाहिए। ध्यान दें कि यदि आप सूची में बहुत कुछ लिखते हैं तो यह बहुत ही कुशल नहीं होगा।
अन्यथा, यदि आप वेक्टर या सिंक्रनाइज़लिस्ट का उपयोग करते हैं, तो आपको पुनरावृत्ति के दौरान सूची के लॉक को पकड़ने की आवश्यकता है। यह अपवाद को रोक देगा लेकिन यह समवर्तीता को भी रोक देगा ...
- 1. यदि मैंने कभी भी हैशसेट का उपयोग नहीं किया है, तो क्या मुझे अभी भी GetHashCode लागू करना चाहिए?
- 2. हास्केल: मैंने अभी क्या मोनैड किया था?
- 3. जावा: ConcurrentModificationException जबकि सूची
- 4. ConcurrentModificationException भी एक LinkedHashMap पर Collections.sychronizedMap उपयोग करने के साथ
- 5. यदि ओपनआईडी, मुझे अभी भी
- 6. एंड्रॉइड थ्रेड समस्या, जब भी मैंने वर्कर थ्रेड का उपयोग किया है तो ui अभी भी ब्लॉक क्यों करता है?
- 7. सूची ConcurrentModificationException फेंकता है लेकिन सेट ConcurrentModificationException फेंकता नहीं है?
- 8. क्या @ सिंथेसिस का उपयोग अभी भी किया जाना चाहिए?
- 9. मुझे अभी भी एमवीवीएम नहीं मिला है!
- 10. क्या मुझे अभी भी सिल्वरलाइट/एक्सबीएपी
- 11. मैंने डूटरर्न का इस्तेमाल किया, मॉकिटो अभी भी अज्ञात वर्ग के अंदर वास्तविक कार्यान्वयन क्यों कहेंगे?
- 12. ConcurrentModificationException
- 13. टीएसक्यूएल 2008 एलटीआरएम का उपयोग (आरटीआरएम और अभी भी डेटा
- 14. ini_set ("memory_limit", "-1") का उपयोग करना और अभी भी स्मृति
- 15. क्या Yacc अभी भी उद्योग में उपयोग किया जाता है?
- 16. क्या मुझे अभी भी # शामिल गार्ड और #pragma का उपयोग करना चाहिए?
- 17. क्लासिक ADO.NET अभी भी उपयोग किया जाता है?
- 18. कोई भी अभी भी xlib का उपयोग कर प्रोग्राम
- 19. अभी भी सीवीएस का उपयोग करने के किसी भी कारण?
- 20. क्या मुझे अभी भी तैयार वक्तव्य का उपयोग करने की आवश्यकता है
- 21. और मैंने सोचा कि मुझे स्कोप
- 22. ConcurrentModificationException और एक हैश मैप
- 23. रेल 3.1 एसएसएल का उपयोग तब भी किया जाता है जब मैंने एसएसएल को अक्षम किया हो?
- 24. सी ++ अभी भी stdio.h का उपयोग क्यों कर रहा है?
- 25. गो - घोषित और उपयोग नहीं किया गया त्रुटि, जब मुझे लगता है कि मैंने वैरिएबल
- 26. एंड्रॉयड: SingleClientConnManager का अमान्य उपयोग: कनेक्शन अभी भी
- 27. क्या मुझे अभी भी .NET 4.0 में सरल सीरियलाइजेशन के लिए बाइनरीफॉर्मेटर का उपयोग करना चाहिए?
- 28. आप अभी भी PHP का उपयोग क्यों करते हैं?
- 29. सिक्योरस्ट्रिंग "एन्क्रिप्टेड" कैसे है और अभी भी उपयोग योग्य है?
- 30. सी # मुझे सूची का उपयोग कब करना चाहिए और मुझे सरणीसूची का उपयोग कब करना चाहिए?
समवर्ती! = समांतर। आप एक थ्रेड के साथ एक ConcurrentModificationException प्राप्त कर सकते हैं। –