我必须确保在迭代向量时;没有要避免的 Vector 更新ConcurrentModificationException
。我可以使用并发收集。但我只是想尝试一下 Vector。下面是我写的代码。
public class TestConcurrentModification1 {
Vector a = new Vector();
public static void main(String[] args) {
final TestConcurrentModification1 obj = new TestConcurrentModification1();
new Thread(){
public void run(){
for(int i = 0; i < 5; i++){
try {
Thread.sleep(1);
} catch (InterruptedException e) {}
obj.a.add(""+i);
}
System.out.println(obj.a);
}
}.start();
new Thread(){
public void run(){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
synchronized (obj.a) {
Iterator itr = obj.a.iterator();
while(itr.hasNext()) {
obj.a.add("TEST");//java.lang.OutOfMemoryError: Java heap space
//itr.remove(); //java.lang.IllegalStateException
}
}
}
}.start();
}
}
但是上面的代码抛出 1) OutOfMemoryError
OR 2) IllegalStateException
。您能否解释一下导致这两个异常的原因。以及如何实现我避免ConcurrentModificationException
在 a 上的目标Vector
?
我必须为 Java 1.4.2 或更早版本解决这个问题。