JAVA并发容器:为什么说ConcurrentHashMap是弱一致性的?

ConcurrentHashMap的弱一致性体现在clear、迭代器和get方法,原因在于没有加锁。
举例:
迭代器在遍历数据的时候是一个Segment一个Segment去遍历的,如果在遍历完一个Segment时正好有一个线程在刚遍历完的Segment上插入数据,就会体现出不一致性。
clear也是一样。
get方法在取数据的时候,如果有一个线程正好在put,假设他put的key是存在的,那么get获取数据的时候可以获取到put的新值,因为HashEntry的value是volatile修饰的,所以在一个线程对其进行修改后,另一个线程可以马上看到。
如果是一个新HashEntry,那么就不能马上看到,虽然HashEntry的数组 table被volatile修饰,但是这样只是代表table的引用地址如果被修改,其他线程可以立马看到,并不代表table里的数据被修改立马可以看到。

至于更详细的一些东西,有几篇博客写的还是不错的。
https://blog.csdn.net/wzq6578702/article/details/50908836
https://www.jianshu.com/p/77907ecc60e9

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值