ConcurrentHashMap特性二
来源:互联网 发布:淘宝上怎么买翻墙 编辑:程序博客网 时间:2024/06/05 03:40
1.ConcurrentHashMap读的特性
1.1 ConcurrentHashMap get操作。
源代码:
public V get(Object key) { Segment<K,V> s; // manually integrate access methods to reduce overhead HashEntry<K,V>[] tab; int h = hash(key); long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE; if ((s = (Segment<K,V>)UNSAFE.getObjectVolatile(segments, u)) != null && (tab = s.table) != null) { for (HashEntry<K,V> e = (HashEntry<K,V>) UNSAFE.getObjectVolatile (tab, ((long)(((tab.length - 1) & h)) << TSHIFT) + TBASE); e != null; e = e.next) { K k; if ((k = e.key) == key || (e.hash == h && key.equals(k))) return e.value; } } return null; }可以看出通过hash运算来确定是哪一个段,取出该Segment<K,V>。使用的方法是UNSAFE.getObjectVolatile。
getObjectVolatile()方法提供的原子读语义,来获得Segment以及对应的链表。然后通过Segment.table得到
HashEntry<K,V>,但是遍历过程当中可能做了修改,所以因此get和containsKey返回的可能是过时的数据,
这一点是ConcurrentHashMap在弱一致性上的体现。如果要求强一致性,那么必须使Collections.synchronizedMap()方法。
阅读全文
0 0
- ConcurrentHashMap特性二
- ConcurrentHashMap的特性
- jdk1.5新特性 ConcurrentHashMap
- jdk1.5新特性 ConcurrentHashMap
- ConcurrentHashMap 源码分析 (二)
- 深入ConcurrentHashMap二
- concurrentHashMap学习(二)
- ConcurrentHashMap源码(二)--initTable
- 学习笔记二之ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- ConcurrentHashMap
- Non-ASCII character '\xe7' in file ex6.py on line 1, but no encoding declare
- 分布式代码管理工具Git安装和使用(linux)
- 洛谷——乌龟棋题解
- java 图片合成
- Unity Shader入门教程(三)自制光照模型
- ConcurrentHashMap特性二
- TOMCAT原理详解及请求过程
- 实习第一个月体会和总结
- PM2
- Inno Setup 已经安装好程序后,再次运行安装包无法选择安装路径的问题。
- laravel笔记-数据库(查询构建器)
- Html-1.简单结束和标签
- opencv 中有关图片滚动条的使用
- 主线程退出后,子线程会不会退出