问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

...HashMap对concurrentModificationException的处理

发布网友 发布时间:2024-10-02 01:11

我来回答

1个回答

热心网友 时间:2024-10-25 07:35

在非同步容器中,例如ArrayList与HashMap,其使用场景是在单线程环境中,抛concurrentModificationException是为了防止在多线程场景下容器使用出现错误。例如第一个线程读,第二个线程删除了一个元素,导致第一个线程抛出了数组越界异常。这只是个例子,对于多线程的不可见性还会出现hashmap扩容死循环等问题,所以抛concurrentModificationException是为了避免更多的错误发生。

HashTable是一个同步容器,但是因为HashTable生成Iterator迭代器时,是new一个迭代器对象。

所以多线程环境下,其他线程并不能修改本线程迭代器的exceptModCount,所以当next或hasNext时依然会报异常。
疑问:作为同步容器为什么还需要报此异常?
想必都知道HashTable的get,put,remove操作都是对整个表上锁的,也就是remove方法是synchronized方法,由此做到同步。 但是 !Iterator的方法并没有做到同步,甚至同一个线程获取两次iterator是两个iterator对象,也就是说当其他线程在remove的时候,该线程依然可能通过iterator对象的next方法抛出数组越界等异常。

1.因为concurrentHashMap读写不互斥,所以当其他线程正在修改容器中部分副本时,读操作不受影响。
2.table用violatile修饰,使得读操作可以收到更新。加上hapend-before机制,避免读取到更新前的数据。
注意 :violatile修饰数组时,修饰的是数组的地址而不是数组的元素。
既然volatile修饰数组对get操作没有效果那加在数组上的volatile的目的是什么呢?
其实就是为了使得Node数组在扩容的时候对其他线程具有可见性而加的volatile

3.由于读写机制都是通过violatile实现的,所以在迭代的时候保证了数据的可见性,因此不会出现数组越界等异常,所以不需要抛concurrentModificationException

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? Hashmap的重要变量与高频面试题整理 求财运最灵的方法 怎么样可以守住财运 家里怎么才能有聚财的风水,家里怎么样摆设才聚财 MySQL的视图 探究MySQL跨数据库视图的用途和实现方式mysql跨数据库视图 保险到期不续费可以退保吗? 七星彩投注策略详解 Windows Defender警报等级 Camera LinkCamera Link接口的三种配置 PPT制作抽奖只需3步,逼格爆满 牛肉煮出来发黑是正常的吗 i9100与iphone4相比 i9100有哪些优势 三星i9100和iphone4相比那个好 i9100和iPhone4谁好? 这个问题令我很烦 详细说 ...map = new HashMap),put了3个键值,问 out.print(map.keySet());这... 三星i9100和iphone4现在买哪个好? iphone4跟i9100哪个更好一些。 三星I9100与iphone 4哪个性价比高。枪手滚 iphone4和三星i9100的比较 ...没人接,到今天为止还是一样,有谁可以帮我手机定位的吗? 如何修剪盆栽 盆栽玫瑰花怎么修剪 如何才能让我的男朋友不这么自私? 用信用卡都有什么费用 信用卡会有什么费用 如何蒸出美味大闸蟹 办信用卡会有什么费用 2488是什么意思 2488数字吉利么 刚健了身 冲个热水澡 可以不 ...懒人十大拖把品牌排行榜_拖把什么牌子质量好用一些 我BB最近每天晚上一到三点钟就开始哭闹,一直要到天亮才能睡.看了医生... 身高177的绝世美女,连续和成龙合作3部电影,终成杨幂的铁杆闺蜜_百度知 ... ...我去处理违章车管所说车子没有绑定一个驾驶员 必须绑定一个 请问... 异地恋情侣最好不要超过几年? 异地恋最好能坚持多久? 大学异地恋能坚持多久 九年级化学 三点一测 启动中学作业本 良师教案哪个好 PS中怎样把通道掉换到图层 学习制衣困难吗