ConcurrentHashMap 使用注意事项

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

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/              rem

相关文章
相关标签/搜索