当前位置: 首页 > news >正文

攻击静态网站智能seo系统

攻击静态网站,智能seo系统,263邮箱个人登录口,类似于拼多多的网站怎么做java迭代集合出现并发修改异常(ConcurrentModificationException)的原因以及解决方案 一. 什么时候会出现并发修改异常? 这里先看需求 : 定义一个集合,存储 唐僧,孙悟空,猪八戒,沙僧,遍历集合,如果遍历到猪八戒,往集合中添加一个白龙马 很显然要求我们先创建一个集合并进行…

java迭代集合出现并发修改异常(ConcurrentModificationException)的原因以及解决方案

一. 什么时候会出现并发修改异常?

这里先看需求 : 定义一个集合,存储 唐僧,孙悟空,猪八戒,沙僧,遍历集合,如果遍历到猪八戒,往集合中添加一个白龙马

很显然要求我们先创建一个集合并进行迭代 , 当迭代到猪八戒,的时候插入白龙马

代码实现

public static void main(String[] args) {//需求:定义一个集合,存储 唐僧,孙悟空,猪八戒,沙僧,遍历集合,如果遍历到猪八戒,往集合中添加一个白龙马ArrayList<String> list = new ArrayList<>();list.add("唐僧");list.add("孙悟空");list.add("猪八戒");list.add("沙僧");Iterator<String> iterator = list.iterator();while(iterator.hasNext()){String element = iterator.next();if ("猪八戒".equals(element)){list.add("白龙马");}}System.out.println(list);}

运行后报错

在这里插入图片描述

这里报了一个ConcurrentModificationException 也就是并发修改异常

二. 产生原因

我们来进入源码分析一下

  1. 首先我们来进入 iterator() 方法 , 这里iterator() 是返回了了一个新对象也就是Itr() , 那我们再来看一下Itr()方法

    public Iterator<E> iterator() {return new Itr();}
    
  2. Itr() , 光观察Itr()好像并没有发现异常的原因 , 那我们再看next()方法

    private class Itr implements Iterator<E> {int cursor;       // index of next element to returnint lastRet = -1; // index of last element returned; -1 if no suchint expectedModCount = modCount;// prevent creating a synthetic constructorItr() {}public boolean hasNext() {return cursor != size;}
  3. next() , 这里在运行next()的时候会先调用checkForComodification();方法那我们就先来查看这个方法

    @SuppressWarnings("unchecked")public E next() {checkForComodification();int i = cursor;if (i >= size)throw new NoSuchElementException();Object[] elementData = ArrayList.this.elementData;if (i >= elementData.length)throw new ConcurrentModificationException();cursor = i + 1;return (E) elementData[lastRet = i];}
    
  4. checkForComodification() , 很显然这里判断了modCount 与 expectedModCount是否相等 , 如果不相等则抛出throw new ConcurrentModificationException(); 也就是并发修改异常

    modCount: 实际操作次数
    expectedModCount:预期操作次数

     final void checkForComodification() {if (modCount != expectedModCount)throw new ConcurrentModificationException();}
    
  5. 那么通过上面的分析我们就知道了产生问题的原因是什么 , 也就是modCount 与 expectedModCount并不相等

    那是什么导致modCount 与 expectedModCount不相等的呢 ? 在代码中我们调用了一个add方法 , 那么add是否就是产生问题的原因

  6. add() , 还是和刚才一样 , 进入add()底层源码我们来找一下原因

    public boolean add(E e) {modCount++;add(e, elementData, size);return true;}
    

    到这里就一目了然了我们在调用add的时候会对modCount++ , 在modCount自增之后 , 我们再调用next()方法就会导致modCount 与 expectedModCount不相等 , 从而抛出异常

三. 解决方法

ArrayList中的方法:ListIterator listIterator()

public class Demo03Iterator {public static void main(String[] args) {//需求:定义一个集合,存储 唐僧,孙悟空,猪八戒,沙僧,遍历集合,如果遍历到猪八戒,往集合中添加一个白龙马ArrayList<String> list = new ArrayList<>();list.add("唐僧");list.add("孙悟空");list.add("猪八戒");list.add("沙僧");//Iterator<String> iterator = list.iterator();ListIterator<String> listIterator = list.listIterator();while(listIterator.hasNext()){String element = listIterator.next();if ("猪八戒".equals(element)){listIterator.add("白龙马");}}System.out.println(list);}
}
http://www.yayakq.cn/news/350577/

相关文章:

  • 二级学院网站建设报告东莞哪里建设网站好
  • 做网站主要学什么条件牡丹江网站建设定制开发
  • 上海羽贝网站建设2019Wordpress中文主题
  • 浏阳网站建设公司miniui做的网站
  • 网站点击弹出下载框 怎么做的排版素材网站
  • 浙江省工程建设管理质量协会网站高德地图搜索不到国外
  • 免费手机网站平台注册城乡建设部网站甘红刚
  • 广告制作费和广告服务费区别网站改版优化
  • 官方网站建设 省心磐石网络一般网站前端是用什么做
  • 哈密市住房和城乡建设局网站wordpress 煎蛋评论
  • 临沂手工活外发加工网三河seo
  • flash网站的制作辽宁省建设工程信息网人员解除
  • 广州市建设工程定额管理网站成都网站建设工作室
  • 甜品网站建设方案帮别人做网站赚钱吗
  • 网站网页文案怎么写微信怎么开团购卖东西
  • 口碑好的扬州网站建设网站建设uuiop
  • 黑龙江省住房和建设厅网站网站开发需求
  • 做模特网站男女做羞羞事的网站
  • 网站含中国的备案笑话网站源码下载
  • 网站开发需要的编程软件wordpress换域名后缩略图不显示
  • 网站建设合肥邯郸房产网签查询网
  • 石家庄网站建设联系方式政协网站建设功能
  • 建设微信商城网站制作搭建dede网站服务器
  • 网站运营及推广方案阿里云商标注册官网
  • 外贸网站海外推广3个必去网站苏州优化方式
  • 百度验证网站的好处选择郑州网站建设
  • 一个vps主机放两个网站 速度互联网工资一般有多少
  • 视频链接生成网站市场调研报告范文大全
  • 如何让网站快速收录你wordpress网站结构
  • 学习前端开发的网站开发公司工程部技术负责人职责