ArrayList是线程不安全的,用Vector、Stack代替,
但是,Vector不一定就是安全的,若使用forEach或者Iterator遍历集合的时候做更新操作,会引发异常,而使用for循环则不会;
package com.concurrent.example;
import java.util.Iterator;
import java.util.Vector;
public class VectorExample {
//抛出ConcurrentModificationException
public static void test1(Vector<Integer> vector) {//forEach
for (Integer integer : vector) {
if (integer.equals(3)) {
vector.remove(integer);
}
}
}
//抛出ConcurrentModificationException
public static void test2(Vector<Integer> vector) {//iterator
Iterator<Integer> iterator = vector.iterator();
while(iterator.hasNext()) {
Integer integer = iterator.next();
vector.remove(integer);
}
}
//success
public static void test3(Vector<Integer> vector) {
for(int i=0;i<vector.size();i++) {
if (vector.equals(3)) {
vector.remove(i);
}
}
}
public static void main(String[] args) {
Vector<Integer> vector = new Vector<Integer>();
vector.add(1);
vector.add(2);
vector.add(3);
test3(vector);
}
}