**并发修改异常**

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

//并发修改异常
/*
我有一个集合 List<String> s = new ArrayList<>();
里面有三个元素 s.add("hello");
            s.add("world");
            s.add("he");

遍历集合,得到每一个元素,看看有没有world这个元素,如果有添加一个"javaee"元素
 */
public class E8 {
    public static void main(String[] args) {
        //1.创建集合对象
        List<String> s = new ArrayList<>();

        //2.添加值
        s.add("hello");
        s.add("world");
        s.add("he");

        //3.遍历集合,得到每一个元素,看看有没有world这个元素,如果有添加一个"javaee"元素
        /*Iterator<String> it = s.iterator();
        while(it.hasNext()){
           String t = it.next();
           if(t.equals("world")){
               s.add("javaee");
           }
        }

         */
        /*
        ConcurrentModificationException
        预期修改次数与实际修改次数不同
        迭代器中的it.next()方法进行了一个操作
        来判断 预期修改次数与实际修改次数
        当执行 s.add("javaee");源码中实际修改次数加一
        而预期修改次数不变,如果预期修改次数与实际修改次数不同则会抛出异常
        总的来说:当使用迭代器的时候不要添加数据
        用另一种方法
         */

        //4.遍历集合,得到每一个元素,看看有没有world这个元素,如果有添加一个"javaee"元素
        for (int i = 0; i < s.size(); i++) {
            String name = s.get(i);
            if(name.equals("world")){
                s.add("javazz");
            }
        }

        System.out.println(s);
        //[hello, world, he, javazz]
    }
}

2021-03-15 18:55:04

上一篇:JavaEE框架整合开发入门到实战:Spring+SpringMVC+MyBAtis(微课版)——代码练习第一章


下一篇:JAVA (JavaEE、JavaSE)