pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

Java 中的 Iterator 如何知道何時(shí)拋出 ConcurrentModif

How does an Iterator in Java know when to throw ConcurrentModification Exception(Java 中的 Iterator 如何知道何時(shí)拋出 ConcurrentModification 異常)
本文介紹了Java 中的 Iterator 如何知道何時(shí)拋出 ConcurrentModification 異常的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我有以下代碼引發(fā) ConcurrentModificationException,因?yàn)槲以谕粋€(gè)列表上使用了兩個(gè)不同的迭代器,其中一個(gè)正在修改列表.所以,第二個(gè)迭代器在讀取列表時(shí)會(huì)拋出異常,因?yàn)槠渌饕呀?jīng)修改了列表.

I have the following code which throws ConcurrentModificationException because I am using two different iterators on the same list and one of them is modifying the list. So, the second iterator throws the exception when reading the list because some other iterator has modified the list.

    List<Integer> list = new ArrayList<>();

    populate(list);//A method that adds integers to list

    ListIterator<Integer> iterator1 = list.listIterator();
    ListIterator<Integer> iterator2 = list.listIterator();

    while (iterator1.hasNext()) {
        if(iterator1.next() < 5)
            iterator1.remove();
    }

    while (iterator2.hasNext()){
        if(iterator2.next() < 5) {
         //Call handler   
        }
    }

我的問題是 iterator2 如何知道 internally 如果 list 尚未到達(dá)某個(gè)元素,則它已被其他迭代器修改iterator1 還刪除了哪個(gè)?它如何確定其他一些 iterator 已經(jīng)改變了 list?一種方法是跟蹤大小,但這不是原因,因?yàn)槠渌恍┑骺梢蕴鎿Q任何元素.

My question is how does iterator2 know internally that the list has has been modified by some other iterator if it has not reached an element which is yet removed by iterator1? How does it figure out that some other iterator has mutated the list? One way could be keep track of size but that can't be the reason since some other iterator can just replace any element.

推薦答案

回答此類問題的一個(gè)好方法是查看源代碼,例如 ArrayList 的源代碼.搜索 ConcurrentModificationException.

A good way to answer questions like this is to look at the source code, for example the source code for ArrayList. Search for ConcurrentModificationException.

你應(yīng)該能夠說事情是這樣工作的:

You should be able to tell that things work rather like this:

  • 集合對(duì)象有一個(gè)修改計(jì)數(shù),該計(jì)數(shù)從零開始,并在發(fā)生添加或刪除或類似操作時(shí)增加.
  • 創(chuàng)建迭代器對(duì)象時(shí),我們將集合的當(dāng)前修改計(jì)數(shù)存儲(chǔ)在迭代器中.
  • 每次使用迭代器時(shí),它都會(huì)檢查集合的 mod 計(jì)數(shù)與迭代器在創(chuàng)建時(shí)獲得的 mod 計(jì)數(shù).如果這些值不同,則會(huì)引發(fā)異常.

在您的情況下,列表中 iterator1 執(zhí)行的刪除操作會(huì)更改列表的結(jié)構(gòu)操作計(jì)數(shù) (modCount).當(dāng) iterator2 被要求刪除時(shí),它會(huì)看到它最初收到的 expectedModCount 為 0,與列表的當(dāng)前 mod 計(jì)數(shù)不同.

In your case, remove operations performed by iterator1 on the list change the structural operation count (modCount) of the list. When iterator2 is asked to remove, it sees its expectedModCount, which it received initially as 0, differing from the current mod count of the list.

需要注意的是,it.remove 是一個(gè)特例.當(dāng)?shù)髯约簞h除時(shí),它的 expectedModCount 會(huì)相應(yīng)地調(diào)整,以與底層列表保持同步.

It should be noted that it.remove is a special case. When an iterator does a remove itself, its expectedModCount adjusts accordingly, to keep in sync with the underlying list.

這篇關(guān)于Java 中的 Iterator 如何知道何時(shí)拋出 ConcurrentModification 異常的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Java Remove Duplicates from an Array?(Java從數(shù)組中刪除重復(fù)項(xiàng)?)
How to fix Invocation failed Unexpected Response from Server: Unauthorized in Android studio(如何修復(fù)調(diào)用失敗來自服務(wù)器的意外響應(yīng):在 Android 工作室中未經(jīng)授權(quán))
AES encryption, got extra trash characters in decrypted file(AES 加密,解密文件中有多余的垃圾字符)
AES Error: Given final block not properly padded(AES 錯(cuò)誤:給定的最終塊未正確填充)
Detecting incorrect key using AES/GCM in JAVA(在 JAVA 中使用 AES/GCM 檢測(cè)不正確的密鑰)
AES-256-CBC in Java(Java 中的 AES-256-CBC)
主站蜘蛛池模板: 搪瓷反应釜厂家,淄博搪瓷反应釜-淄博卓耀 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 大学食堂装修设计_公司餐厅效果图_工厂食堂改造_迈普装饰 | 深圳市源和塑胶电子有限公司-首页 | 中国品牌排名投票_十大品牌榜单_中国著名品牌【中国品牌榜】 | 魔方网-培训咨询服务平台| 智能交通网_智能交通系统_ITS_交通监控_卫星导航_智能交通行业 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 北京乾茂兴业科技发展有限公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 河南膏药贴牌-膏药代加工-膏药oem厂家-洛阳今世康医药科技有限公司 | 伊卡洛斯软装首页-电动窗帘,别墅窗帘,定制窗帘,江浙沪1000+别墅窗帘案例 | 工控机,嵌入式主板,工业主板,arm主板,图像采集卡,poe网卡,朗锐智科 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 沈阳真空机_沈阳真空包装机_沈阳大米真空包装机-沈阳海鹞真空包装机械有限公司 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 昆山PCB加工_SMT贴片_PCB抄板_线路板焊接加工-昆山腾宸电子科技有限公司 | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 蓝鹏测控平台 - 智慧车间系统 - 车间生产数据采集与分析系统 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 免费个人pos机申请办理-移动pos机刷卡-聚合收款码办理 | 齿轮减速电机一体机_蜗轮蜗杆减速马达-德国BOSERL齿轮减速机带电机生产厂家 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 废旧物资回收公司_广州废旧设备回收_报废设备物资回收-益美工厂设备回收公司 | 柴油机_柴油发电机_厂家_品牌-江苏卡得城仕发动机有限公司 | MVE振动电机_MVE震动电机_MVE卧式振打电机-河南新乡德诚生产厂家 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 工业铝型材-铝合金电机壳-铝排-气动执行器-山东永恒能源集团有限公司 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 水轮机密封网 | 水轮机密封产品研发生产厂家 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 【直乐】河北石家庄脊柱侧弯医院_治疗椎间盘突出哪家医院好_骨科脊柱外科专业医院_治疗抽动症/关节病骨伤权威医院|排行-直乐矫形中医医院 | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 |