क्या यह समवर्ती मोडिफिकेशन अपवाद से वेक्टर सुरक्षित पर पुनरावृत्ति कर रहा है?
हाँ यह है.अगर यह उस मामले में तो संबद्ध नहीं है वेक्टर से अधिक बार-बार दोहराना ConcurrentModificationException
से सुरक्षित बनाता है अगर आप विभिन्न धागे के माध्यम से वेक्टर एक्सेस कर रहे हैं और कुछ अन्य थ्रेड संरचना की दृष्टि से किसी में वेक्टर संशोधित कर रहा है इटरेटर बनने के बाद, इटेटरेटर ConcurrentModificationException
फेंक देगा। जबकि निष्पादन अपने सिस्टम पर
import java.util.*;
class VVector
{
static Vector<Integer> mapItems = new Vector<Integer>();
static
{
for (int i = 0 ; i < 200 ; i++)
{
mapItems.add(i);
}
}
public static void readVector()
{
Iterator<Integer> iterator = mapItems.iterator();
try
{
while(iterator.hasNext())
{
System.out.print(iterator.next() + "\t");
}
}
catch (Exception ex){ex.printStackTrace();System.exit(0);}
}
public static void main(String[] args)
{
VVector v = new VVector();
Thread th = new Thread(new Runnable()
{
public void run()
{
int counter = 0;
while (true)
{
mapItems.add(345);
counter++;
if (counter == 100)
{
break;
}
}
}
});
th.start();
v.readVector();
}
}
यह निम्न उत्पादन दिखा रहा है::
0 1 2 3 4 5 6 7 8 9
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at VVector.readVector(VVector.java:19)
at VVector.main(VVector.java:38)
लेकिन आपको लगता है कि Vector
तक पहुँचने के लिए Iterator
युक्त कोड के ब्लॉक बनाने अगर दूसरी ओर सिंक्रनाइज़ इस कोड को चलाने पर विचार mapItems
लॉक के रूप में उपयोग करते हुए, यह Vector
से संबंधित अन्य विधियों के निष्पादन को रोक देगा जब तक कि synchronized
ब्लॉक परमाणु रूप से पूरा नहीं हो जाता है।
स्रोत
2013-03-15 18:19:35
क्या आपको स्वीकार करने का कोई सही जवाब मिला है ?? – AmitG