中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

蘇州哪家做網(wǎng)站便宜免費創(chuàng)建網(wǎng)站軟件

蘇州哪家做網(wǎng)站便宜,免費創(chuàng)建網(wǎng)站軟件,制作網(wǎng)頁的圖,軟件商店打不開怎么辦一、異常產(chǎn)生 當我們使用foreach迭代一個ArrayList或者HashMap時,如果嘗試對集合做一些修改操作(例如刪除元素或新增),可能會拋出java.util.ConcurrentModificationException的異常。 javapublic static void main(String[] args)…

一、異常產(chǎn)生
當我們使用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);}

執(zhí)行之后會報:
在這里插入圖片描述


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異常產(chǎn)生的原因
ArrayList的父類AbstarctList中有一個域modCount,每次對集合進行修改(增添元素,刪除元素。。。)時都會modCount++.而foreach的背后實現(xiàn)原理其實就是Iterator,等同于注釋部分代碼。在這里,迭代ArrayList的Iterator中有一個變量expectedModCount,該變量會初始化和modCount相等,但如果接下來對集合進行修改,modCount改變,就會造成expectedModCount !=modCount,此時就會掏出異常java.util.ConcurrentModificationException異常。

過程如下圖:
在這里插入圖片描述
三、異常的解決
1.單線程環(huán)境
上面我們已經(jīng)了解了異常的發(fā)送原因,接下我們說一下解決方案。
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);

細心的朋友會發(fā)現(xiàn)Itr中的也有一個remove方法,實質(zhì)也是調(diào)用了ArrayList中的remove,但增加了expectedModCount = modCount;保證了不會拋出java.util.ConcurrentModificationException異常。

但是,這個辦法的有兩個弊端
1.只能進行remove操作,add、clear等Itr中沒有。
2.而且只適用單線程環(huán)境。

2、多線程環(huán)境
方法一:迭代前加鎖,解決了多線程問題,但還是不能進行迭代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,其實現(xiàn)原理在于,每次add或remove等所有的操作都是重新創(chuàng)建一個新的數(shù)組,再把引用指向新的數(shù)組。

對于HashMap的迭代刪除是一樣的

在這里插入圖片描述

在這里插入圖片描述

http://www.risenshineclean.com/news/47110.html

相關(guān)文章:

  • 戴爾cs24TY可以做網(wǎng)站嗎蘇州網(wǎng)站開發(fā)公司
  • 做站群的網(wǎng)站怎么來什么軟件可以發(fā)布推廣信息
  • 如何做網(wǎng)站遷移網(wǎng)絡(luò)營銷手段
  • 秦皇島住房和城鄉(xiāng)建設(shè)網(wǎng)官網(wǎng)奉化seo頁面優(yōu)化外包
  • 電商網(wǎng)站開發(fā)建設(shè)今日國際新聞頭條新聞
  • 信用網(wǎng)站建設(shè)內(nèi)容專業(yè)seo網(wǎng)站
  • 馬云將來淘汰的十個行業(yè)網(wǎng)站建設(shè)西安網(wǎng)站維護
  • 網(wǎng)站建設(shè)找星火龍佛山seo培訓(xùn)機構(gòu)
  • 模版網(wǎng)站后期可以更換圖片嗎seo和sem的區(qū)別
  • 重慶做網(wǎng)站建設(shè)seo推廣一年要多少錢
  • 做視頻網(wǎng)站掙錢嗎百度關(guān)鍵詞排名優(yōu)化
  • 網(wǎng)站設(shè)計的寬度百度seo刷排名軟件
  • 昆明賢邦網(wǎng)站建設(shè)百度站長工具seo查詢
  • 網(wǎng)站重大建設(shè)項目公開發(fā)布制度營銷戰(zhàn)略包括哪些方面
  • 中介網(wǎng)站怎么做seo排名優(yōu)化聯(lián)系13火星軟件
  • 昆明如何做百度的網(wǎng)站搜多多搜索引擎入口
  • 江西省城鄉(xiāng)建設(shè)廳網(wǎng)站查詢證件西安網(wǎng)站seo價格
  • 網(wǎng)頁網(wǎng)站建設(shè)軟件有哪些百度品牌推廣
  • 政府網(wǎng)站建設(shè)多少錢商品促銷活動策劃方案
  • wordpress 頭像設(shè)置湖南靠譜seo優(yōu)化公司
  • 網(wǎng)站如何做移動適配百度一下百度主頁
  • 給我免費播放片高清在線觀看視頻搜索引擎優(yōu)化面對哪些困境
  • 西安做網(wǎng)站的公司客服企業(yè)網(wǎng)絡(luò)營銷策劃方案范文
  • 佛山企業(yè)用seo策略seo技術(shù)是干什么的
  • 宜陽縣網(wǎng)站建設(shè)怎么自己注冊網(wǎng)站平臺了
  • 石家莊網(wǎng)站外包公司經(jīng)典營銷案例
  • 成都疫情最新新聞百度seo刷排名工具
  • 網(wǎng)站后臺注入推廣普通話手抄報內(nèi)容大全資料
  • 開發(fā)網(wǎng)站通過第三方微信認證登錄開發(fā)費用北京seo運營推廣
  • 廣州網(wǎng)站推廣多少錢重慶seo網(wǎng)絡(luò)推廣關(guān)鍵詞