Exception in thread "main" java.util.ConcurrentModificationException

public class TestArrayList {
  public static     ArrayList< String > arrayList = new ArrayList<String>();
       
       public TestArrayList(){
      this.arrayList.add("A");
      this.arrayList.add("B");
      this.arrayList.add("C");
      this.arrayList.add("D");
       }
       public static void main(String[] args){
      TestArrayList testArrayList = new TestArrayList();
      Iterator<String> iterator = arrayList.iterator(); 
    while(iterator.hasNext()){
      String string= iterator.next();
    arrayList.add("E");
    }
     
       }
}

执行以上代码会抛出java.util.ConcurrentModificationException错误。这是因为主线程在遍历list的时候,子线程在向list中添加元素.。

解决方法:将ArrayList替换为CopyOnWriteArrayList。因为CopyOnWriteArrayList类最大的特点就是,在对其实例进行修改操作(add/remove等)会新建一个数据并修改,修改完毕之后,再将原来的引用指向新的数组。这样,修改过程没有修改原来的数组。也就没有了ConcurrentModificationException错误。

     在java.util.concurrent包中,除了CopyOnWriteArrayList类,也还有这样一个类CopyOnWriteArraySet。CopyOnWriteArraySet的实现是完全基于CopyOnWriteArrayList的

猜你喜欢

转载自blog.csdn.net/yunxizixuan/article/details/28422223