ConcurrentHashMap详解
来源:互联网 发布:图片 js 点击放大 wap 编辑:程序博客网 时间:2024/05/16 10:52
结构:
Segment数组结构+HashEntry数组结构。
其中,Segment是一种可重入锁(ReenTrantLock),它的数据结构和HashMap类似,是一种数组和链表结构。
一个Segment里包含一个HashEntry数组,每个HashEntry是一个链表结构的元素。
对HashEntry数组进行修改的时候,必须先获得它对应的Segment锁。
初始化:
通过initialCapacity、loadFactor和conCurrencyLevel等几个参数来初始化segment数组。
还有segmentShift段偏移量、segmentMask段掩码、每个segment里的HashEntry数组。
concurrencyLevel一般指:
你需要的并发等级,而segment数组长度为了能进行按位与(效率高),必须是2的N次方,
因此ssize即数组长度的取值为ssize>=concurrencyLevel,and ssize =2^N。
concurrencyLevel最大值为65535,意味着ssize最大为65535.
默认情况下concurrencyLevel为16,所以sshift=N。
segmentShift:
用于定位参与散列运算的位数,它等于32-sshift。
用32是因为Hash()方法输出的最大位数为32.
segmentMask:
是散列运算的掩码,为ssize-1,它的各个位的值都是1,以便增加散列性能,减少冲突的发生。
对于segment:
segment的容量threshold=(int)cap*loadFactor,默认情况下,initialCapacity=16,loadFactor=0.75,通过运算cap=1,threshold=0.
其中cap是HashEntry数组的长度,不是1就是2^N。
定位segment:
1、使用分段锁来保护不同段的数据:在插入或获取元素的时候,先通过散列算法定位到Segment。
使用的是Wang/Jenkins的变种算法对元素的hashCode再进行一次散列,提高容器的存储效率。
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- ConcurrentHashMap详解
- conCurrentHashMap详解
- ConcurrentHashMap遍历详解
- java concurrentHashMap 的详解
- ConcurrentHashMap 原理详解
- Java ConcurrentHashMap 详解
- ConcurrentHashMap原理详解
- ConcurrentHashMap原理详解
- ConcurrentHashMap原理详解
- 北大告别过去,走向未来
- 面试利器(二)-------插入排序(直接插入排序和希尔排序(Shell排序))
- 模板渲染和参数传递.
- Centos 6.5搭建Hadoop-2.7.3分布式集群
- zookeeper伪分布安装
- ConcurrentHashMap详解
- 异平台异版本oracle数据导入导出
- navicat 关于orcale新建表空间,用户和权限分配
- HDU 6076 题解
- POJ2229 Sumsets
- Oracle db_link数据同步(数据量小)
- css3学习1
- 加载外部数据
- LitePal基本用法