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

相關文章
相關標籤/搜索