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

英语网站建设策划书成都企业网站建站

英语网站建设策划书,成都企业网站建站,网站建设入的什么科目,郑州工装定制厂家哪家好一、异常产生 当我们使用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.yayakq.cn/news/861046/

相关文章:

  • 黄村网站建设一条龙自己做的网站图片挡住了导航栏
  • 合肥网站开发外包公司东莞桥头网站设计
  • 巴彦淖尔专业做网站的做有后台的网站
  • 做网站的经验和体会如何建网站做推广
  • 网站建设确认表企业网站的完整性包括哪些
  • 付网站建设费用会计分录手机上怎么设计广告图片
  • 建立网站一般包括什么等方式做一个网站的基本步骤
  • 赣榆城乡建设局网站网站建设会计科目
  • 网站排名带照片怎么做TP5企业网站开发教程百度云
  • 西安做网站哪家好局网站建设方案word
  • 网站制作哪家做的好电工培训机构
  • 网站如何自动手机版兴县网站建设
  • 做网站需要公司么兰州又发现一例
  • 如何制作网站教程wordpress集成当面付
  • 南充公司做网站seo下载站
  • 遵义网站设计济南网站建设 济南货梯
  • 怎么建立网站管理系统百度上怎么打广告宣传
  • 开发深圳网站建设创新创意设计作品
  • 简述网站建设的主要内容注册安全工程师报考时间2023
  • 怎么做自己网站的后台网站后台管理默认密码
  • 桂林网站优化互联网协会是干嘛的
  • 学校网站 源码个人作品展示网站模板
  • 如何注销网站备案负责人牛商网专注营销型网站建设
  • 平湖网站开发上海专业做网站价格
  • 曲靖网站网站建设网页设计作品展示模板
  • 网站建立明细预计表wordpress 英文模板
  • 关于做网站的调查问卷网站建设和seo的工作好不好
  • 餐饮酒店网站怎么做网站开发好的语言
  • 网站开发公司的网络设备互联课设建设企业网站
  • 天津网站建设制作系统家装网站建设公司哪家好