ConcurrentHashMap 使用注意事项

本文详细介绍了Java中ConcurrentHashMap (CHM) 的工作原理及其使用注意事项。包括单个操作的线程安全性、弱一致性的特点及应用场景选择,并提供了一些实用链接供进一步学习。

对于ConcurrentHashMap  以下简称CHM 大家都非常熟悉,相信在开发中大家会经常 使用,其在1.8以前 使用锁分段技术,将锁的粒度细化。而在java1.8中使用了另外的实现方式,后面在来分析 。使用CHM需要注意的事项。

1)对于单个操作如 put , containsKey, remove 等 是线程安全的,但是组合都来就不一定了。需要注意组合起来使用的情况,而其也提供 了putifAbsent的 组合线程安全的情况。

 

2) 使用场景    get iterator clear等 都是弱一致性的,虽然性能提高了不少,但是对于数据要求强一致性的应用来说,显然并不适合直接使用CHM. 就需要使用 Hashtable,或者 HashMap , lock synchronized等形式达到数据强一制的效果 。

虽然 在迭代过程中不会抛出异常,比如说当前线程在迭代时,另一个线程是其 进行修改删除或者增加,CHM 会尽量去访问到对Map已做的修改,但这个不能保证。 具体使用时应该考虑 数据一致性 与性能 两者。

 

http://ifeve.com/concurrenthashmap-weakly-consistent/    分析弱一致性

http://ifeve.com/numa-aware-r-w-locks/              

转载于:https://my.oschina.net/ovirtKg/blog/775533

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值