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

做儿童业态招商要去哪些网站宁波seo公司排名

做儿童业态招商要去哪些网站,宁波seo公司排名,高端网站定制平台,微信开发小程序工具一、异常产生 当我们使用foreach迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素或新增),可能会抛出java.util.ConcurrentModificationException的异常。 javapublic static void main(String[] args)…

一、异常产生
当我们使用foreach迭代一个ArrayList或者HashMap时,如果尝试对集合做一些修改操作(例如删除元素或新增),可能会抛出java.util.ConcurrentModificationException的异常。


```javapublic static void main(String[] args) {List<User> list=new ArrayList<>();for(int i=0;i<10;i++){User user = new User();user.setMsg("123"+i);user.setName("王总"+i);list.add(user);}list.forEach(item->{if(Objects.equals(item.getMsg(),"1234")){User user = new User();item.setName("456789");CglibUtil.copy(item,user);list.add(user);}});System.out.println(list);}

执行之后会报:
在这里插入图片描述


map的例子:```javajcItemMap.forEach((x,items)->{List<FinFreightItemR> finFreightItemRList = items.stream().filter(item -> Objects.equals(item.getAmountFlag(), FinConstant.YesOrNo.YES)).collect(Collectors.toList());if(CollectionUtil.isEmpty(finFreightItemRList)){jcItemMap.remove(x);allItemMap.remove(x);}});

在这里插入图片描述

二、java.util.ConcurrentModificationException异常产生的原因
ArrayList的父类AbstarctList中有一个域modCount,每次对集合进行修改(增添元素,删除元素。。。)时都会modCount++.而foreach的背后实现原理其实就是Iterator,等同于注释部分代码。在这里,迭代ArrayList的Iterator中有一个变量expectedModCount,该变量会初始化和modCount相等,但如果接下来对集合进行修改,modCount改变,就会造成expectedModCount !=modCount,此时就会掏出异常java.util.ConcurrentModificationException异常。

过程如下图:
在这里插入图片描述
三、异常的解决
1.单线程环境
上面我们已经了解了异常的发送原因,接下我们说一下解决方案。
1.1我们可以使用iterator迭代器进行遍历

 Iterator<User> iterator = list.iterator();while(iterator.hasNext()){User user = iterator.next();if(Objects.equals(user.getMsg(),"1234")){iterator.remove();}}System.out.println(list);

细心的朋友会发现Itr中的也有一个remove方法,实质也是调用了ArrayList中的remove,但增加了expectedModCount = modCount;保证了不会抛出java.util.ConcurrentModificationException异常。

但是,这个办法的有两个弊端
1.只能进行remove操作,add、clear等Itr中没有。
2.而且只适用单线程环境。

2、多线程环境
方法一:迭代前加锁,解决了多线程问题,但还是不能进行迭代add、clear等操作。

public class Test12 {static List<String> list = new ArrayList<String>();public static void main(String[] args) {list.add("a");list.add("b");list.add("c");list.add("d");new Thread() {public void run() {Iterator<String> iterator = list.iterator();synchronized (list) {while (iterator.hasNext()) {System.out.println(Thread.currentThread().getName()+ ":" + iterator.next());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};}.start();new Thread() {public synchronized void run() {Iterator<String> iterator = list.iterator();synchronized (list) {while (iterator.hasNext()) {String element = iterator.next();if (Objects.equals(element,"c")) {System.out.println(Thread.currentThread().getName()+ ":" + element);iterator.remove();}}}};}.start();}
}

方法二:采用CopyOnWriteArrayList,解决了多线程问题,同时可以add、clear等操作

public class Test12 {static List<String> list = new CopyOnWriteArrayList<>();public static void main(String[] args) throws InterruptedException {list.add("a");list.add("b");list.add("c");list.add("d");new Thread() {public void run() {Iterator<String> iterator = list.iterator();synchronized (list) {while (iterator.hasNext()) {System.out.println(Thread.currentThread().getName()+ ":" + iterator.next());try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};}.start();new Thread() {public synchronized void run() {Iterator<String> iterator = list.iterator();synchronized (list) {while (iterator.hasNext()) {String element = iterator.next();if (Objects.equals(element,"c")) {System.out.println(Thread.currentThread().getName()+ ":" + element);list.remove(element);list.add("123456");}}}};}.start();Thread.sleep(5000);System.out.println(list);}
}

CopyOnWriteArrayList也是一个线程安全的ArrayList,其实现原理在于,每次add或remove等所有的操作都是重新创建一个新的数组,再把引用指向新的数组。

对于HashMap的迭代删除是一样的

在这里插入图片描述

在这里插入图片描述

http://www.shuangfujiaoyu.com/news/25551.html

相关文章:

  • 用php做商城网站的设计论文清远今日头条新闻
  • 义乌网站建设郭友情链接导航
  • 制作二维码的软件百度seo如何快速排名
  • 什么是网站和网页代发新闻稿最大平台
  • 建设企业网站的意义优化营商环境发言材料
  • 做批发比较好的网站有哪些百度推广登录后台登录入口
  • 将网站做成logo怎么做今日舆情热点
  • 石碣网站建设广州seo成功案例
  • 修改网站版权外包公司软件开发
  • 网站打不开怎么回事网站页面优化包括
  • 张店网站建设方案百度推广客服电话人工服务
  • 手机浏览器主页网站推荐百度投诉中心在线申诉
  • 前端网站开发实例视频百度竞价员
  • 做综合医院网站做网站找哪家好
  • 没有公众号建微信网站seo网站排名优化公司哪家好
  • 网站开发怎么挣外快登封搜索引擎优化
  • 推广策略用英语怎么说安徽网站优化
  • 网站建设在哪里接单宁波seo外包引流推广
  • 做网站需要具备什么语言舟山seo
  • 国内谷歌网站SEO优化艾瑞指数
  • 为男人做购物网站2024年3月新冠高峰
  • wordpress修正用户注册页面长沙百度网站优化
  • 大学生毕业设计网站免费观看行情软件网站下载
  • 网页游戏手机抖音矩阵排名软件seo
  • com域名代表什么爱站seo工具包官网
  • 东道设计是4a公司吗百度站长工具seo查询
  • 谷歌推广关键词匹配优化网站怎么做
  • 网上做兼职正规网站百度客户端在哪里打开
  • 司局网站维护廉政风险建设推广引流
  • 西安网站推广优化外贸网站