जहाँ तक मैं बता सकता हूँ, इसका कारण जावाडॉक के उस भाग में पाया जा सकता है जिसे आपने उद्धृत नहीं किया था (मेरा नीचे दिया गया जोर):
सूचियों के लिए एक पुनरावृत्ति जो प्रोग्रामर को किसी भी दिशा में सूची को पार करने की अनुमति देता है, पुनरावृत्ति के दौरान सूची को संशोधित करता है ...
आप देखते हैं, इच्छित उद्देश्य का उपयोग करने की अनुमति है, जबकि सूची को संशोधित किया जा रहा है। संभावित संशोधनों में स्पष्ट रूप से तत्वों को हटाना शामिल है ।
अब सोचें कि अगर हम एक ऐसे तत्व को हटा दें जो current()
इट्रेटर के लिए हो तो क्या होगा - यह मानकर कि इट्रेटर में वर्तमान तत्व की धारणा होगी? इस संदर्भ में, वर्तमान तत्व की धारणा के बिना इसे लागू करने का तरीका मेरे लिए बहुत अच्छा है - क्योंकि इस तरह, इट्रेटर को तत्वों को हटाने के बारे में चिंता करने की आवश्यकता नहीं है।
यह ध्यान रखना महत्वपूर्ण है कि javadoc को इंटरफ़ेस कार्यान्वयन के लिए थ्रेड सुरक्षित होने की आवश्यकता नहीं है।
- इस वजह से, किसी को विभिन्न थ्रेड्स से किए गए संशोधनों के सही संचालन की उम्मीद नहीं करनी चाहिए - इसके लिए, कार्यान्वयन को जेएसआर 133 प्रति जावा मेमोरी मॉडल द्वारा निर्दिष्ट एक्सेस, गारंटी दृश्यता आदि को सिंक्रनाइज़ करने के लिए अतिरिक्त साधन प्रदान करना होगा ।
ListIterator सक्षम है, पुनरावृत्ति करते समय उसी थ्रेड से किए गए संशोधनों को संभाल रहा है। सभी पुनरावृत्तियों की तरह नहीं है, समवर्तीमॉडिफिकेशन अपवाद javadocs विशेष रूप से इस बारे में चेतावनी देते हैं:
... ध्यान दें कि यह अपवाद हमेशा इंगित नहीं करता है कि किसी वस्तु को एक अलग धागे द्वारा समवर्ती रूप से संशोधित किया गया है। यदि एकल थ्रेड किसी ऑब्जेक्ट के अनुबंध का उल्लंघन करने वाले विधि इनवोकेशन का अनुक्रम जारी करता है, तो ऑब्जेक्ट इस अपवाद को फेंक सकता है। उदाहरण के लिए, यदि कोई थ्रेड सीधे संग्रह को संशोधित करता है, जबकि यह संग्रह में विफल-तेज़ पुनरावृत्ति के साथ पुनरावृत्ति करता है, तो पुनरावृत्तिकर्ता इस अपवाद को फेंक देगा ...