我的应用是找一个容器在多线程环境中使用,一个线程不定时修改容器中的元素,另一个线程浏览容器中的元素.下面只是一个特殊时刻的例子
我用的容器vector是线程安全的,但是有时会出现ConcurrentModificationException异常.不知道为什么?如果我这样应用有问题,
怎样解决?
主要代码如下:
Test类:
//测试iterator等的快速失败
public void testIterator()
{
TestIteratorThread testIteratorThread=new TestIteratorThread();
List al=Collections.synchronizedList(new ArrayList());
testIteratorThread.setArr(al);
al.add("1");
al.add("2");
al.add("3");
testIteratorThread.start();
for(Iterator iter=al.iterator();iter.hasNext();)
{
String value=(String )iter.next();
if(value.equals("1"))
{
iter.remove();
break;
}
}
al.add("4");
}TestIteratorThread 类:
public class TestIteratorThread extends Thread {
private List arr;
public void run()
{
while(true)
{
for(Iterator iter=arr.iterator();iter.hasNext();)
{
String value=(String )iter.next();
System.out.println(value);
}
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我用的容器vector是线程安全的,但是有时会出现ConcurrentModificationException异常.不知道为什么?如果我这样应用有问题,
怎样解决?
主要代码如下:
Test类:
//测试iterator等的快速失败
public void testIterator()
{
TestIteratorThread testIteratorThread=new TestIteratorThread();
List al=Collections.synchronizedList(new ArrayList());
testIteratorThread.setArr(al);
al.add("1");
al.add("2");
al.add("3");
testIteratorThread.start();
for(Iterator iter=al.iterator();iter.hasNext();)
{
String value=(String )iter.next();
if(value.equals("1"))
{
iter.remove();
break;
}
}
al.add("4");
}TestIteratorThread 类:
public class TestIteratorThread extends Thread {
private List arr;
public void run()
{
while(true)
{
for(Iterator iter=arr.iterator();iter.hasNext();)
{
String value=(String )iter.next();
System.out.println(value);
}
try {
sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货