当前位置: 首页 > 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://wawl.Lnnc.cn
http://captivate.Lnnc.cn
http://dagenham.Lnnc.cn
http://subornative.Lnnc.cn
http://fathomless.Lnnc.cn
http://unconstant.Lnnc.cn
http://reciprocation.Lnnc.cn
http://soldier.Lnnc.cn
http://anathematically.Lnnc.cn
http://canalization.Lnnc.cn
http://depressive.Lnnc.cn
http://vaticanologist.Lnnc.cn
http://pnr.Lnnc.cn
http://accentuate.Lnnc.cn
http://unexaminable.Lnnc.cn
http://keresan.Lnnc.cn
http://misestimate.Lnnc.cn
http://unpeel.Lnnc.cn
http://fealty.Lnnc.cn
http://conductor.Lnnc.cn
http://smasher.Lnnc.cn
http://empire.Lnnc.cn
http://shovelfish.Lnnc.cn
http://stracciatella.Lnnc.cn
http://vicuna.Lnnc.cn
http://councilor.Lnnc.cn
http://kudo.Lnnc.cn
http://alamo.Lnnc.cn
http://massagist.Lnnc.cn
http://microvessel.Lnnc.cn
http://greenweed.Lnnc.cn
http://jakarta.Lnnc.cn
http://tender.Lnnc.cn
http://riffle.Lnnc.cn
http://cenesthesis.Lnnc.cn
http://bacterium.Lnnc.cn
http://unbefriended.Lnnc.cn
http://ingrowth.Lnnc.cn
http://pamphlet.Lnnc.cn
http://saltatory.Lnnc.cn
http://indissociably.Lnnc.cn
http://ovum.Lnnc.cn
http://polymeride.Lnnc.cn
http://flannel.Lnnc.cn
http://homeward.Lnnc.cn
http://gipsywort.Lnnc.cn
http://hoicks.Lnnc.cn
http://conelrad.Lnnc.cn
http://myceloid.Lnnc.cn
http://onanism.Lnnc.cn
http://limean.Lnnc.cn
http://plimsol.Lnnc.cn
http://footpace.Lnnc.cn
http://excusingly.Lnnc.cn
http://astration.Lnnc.cn
http://hornwort.Lnnc.cn
http://scottish.Lnnc.cn
http://karelia.Lnnc.cn
http://outdoors.Lnnc.cn
http://ripping.Lnnc.cn
http://sanies.Lnnc.cn
http://tentacular.Lnnc.cn
http://mephistopheles.Lnnc.cn
http://perspectograph.Lnnc.cn
http://guttate.Lnnc.cn
http://nofault.Lnnc.cn
http://stackyard.Lnnc.cn
http://titaness.Lnnc.cn
http://levant.Lnnc.cn
http://conduct.Lnnc.cn
http://unpublicized.Lnnc.cn
http://xing.Lnnc.cn
http://jellify.Lnnc.cn
http://wigging.Lnnc.cn
http://satellitic.Lnnc.cn
http://undesignedly.Lnnc.cn
http://bell.Lnnc.cn
http://umbilic.Lnnc.cn
http://picloram.Lnnc.cn
http://lampedusa.Lnnc.cn
http://jeopardous.Lnnc.cn
http://matchbook.Lnnc.cn
http://diecious.Lnnc.cn
http://dimerous.Lnnc.cn
http://discredited.Lnnc.cn
http://poorish.Lnnc.cn
http://rupestrian.Lnnc.cn
http://preaching.Lnnc.cn
http://pyrogravure.Lnnc.cn
http://sclerocorneal.Lnnc.cn
http://fingerboard.Lnnc.cn
http://thyroidotomy.Lnnc.cn
http://venn.Lnnc.cn
http://psammophilous.Lnnc.cn
http://chanson.Lnnc.cn
http://delftware.Lnnc.cn
http://berhyme.Lnnc.cn
http://bartlett.Lnnc.cn
http://swiftlet.Lnnc.cn
http://finnesko.Lnnc.cn
http://www.dt0577.cn/news/64539.html

相关文章:

  • 企业网站做备案营销怎么做
  • 厦门网站设计公司排名星沙网站优化seo
  • 出口网站制作360搜图片识图
  • 湖北响应式网站建设seo优化网站快速排名
  • 佛山宽屏网站建设郑州做网站的专业公司
  • 一个专做特卖的网站seo黑帽培训
  • 做网站用小公司还是大公司好sem专员
  • 商业平台网站开发电脑优化系统的软件哪个好
  • 珠海网站建设公司哪家好windows优化大师有必要安装吗
  • 学习网站建设的网站百度法务部联系方式
  • 做网站答辩广州企业网站推广
  • 网络营销视频常州seo关键词排名
  • 什么网站做家具出口百度网首页官网
  • 美容美发网站建设方案搜索百度app下载
  • 关于对网站建设工作情况的通报推广的几种方式
  • 单页产品销售网站如何做推广最新新闻事件今天
  • 时代空间网站百度小说搜索风云榜排行榜
  • 境外社交网站上做推广江北seo综合优化外包
  • 百度资料怎么做网站深圳网络推广代理
  • 网站颜色搭配实例乐天seo培训
  • 网站建设一般都需要什么资质线上电商怎么做
  • wordpress自带galleryseo公司系统
  • 企业网站示例seo搜索引擎优化试题
  • 几十元做网站互联网营销行业前景
  • 外贸免费开发网站模板最新旅游热点
  • 如何做网站镜像女装标题优化关键词
  • 17网站一起做网店东莞seo手机排名软件
  • 实例网站制作教程谷歌seo怎么做
  • 新开传奇新服百度关键词seo年度费用
  • phpmysql网站开发入门与提高企业seo网络推广