java并发-concurrentHashMap
2016-04-02 21:39
260 查看
应用场景
在大并发情况下,需要保证map的线程安全,且保证写安全和读并发。原理
锁分离
如果要保证线程安全,那么一次操作只能由一个线程完成,特别是写操作。简单的来讲,concurrentHashMap是将一个大的HashTable分解成了多个小的HashTable,实现锁的分离,从而在保证线程安全的情况下,提高读写效率锁顺序
在类似size,containsValue等类似操作需要跨越全表的操作时候,锁顺序固定,避免死锁。不变(Immutable)和易变(Volatile)
concurrentHashMap允许多个线程并发读,且不需要加锁。如果像HashMap一样,允许在hash链的中间添加或者删除元素,在并发读的时候,如果不加锁将得到不一致的数据。故每一个HashEntry保证了key、hash、next节点的不变性,通过value为valatile来保证可见性。数据的添加只能在链表的head处添加,remove的时候,将要remove的节点之前的所有节点复制一份,然后替换掉之前的队列
参考:
Java集合—ConcurrentHashMap原理分析,综述性的文章,建议跟代码对比起来看
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树