Java集合CurrentHashMap

      ConcurrentHashMap是一个线程安全的容器,内部分成了多个Segment,Segment类似于HashTable,Segment实现了ReentrantLock,所以Segment本身就是一个锁结构,允许多个修改操作并发进行,只要多个修改操作在不同的Segment中进行就可以,ConcurrentHashMap锁的粒度保持的小,而不是对整个容器加锁。ConcurrentHashMap定位一个元素的过程需要进行两次Hash操作,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部,两次定位比普通的HashMap耗时要长,好处是写操作的时候可以只对元素所在的Segment进行加锁,不会影响到其他的Segment,并发能力可大大提高。

ConcurrentHashMap为了提高本身的并发能力,在内部采用了一个叫做Segment的结构,一个Segment其实就是一个类Hash Table的结构,

Segment内部维护了一个链表数组,Segment结构:



Segment中的元素是以HashEntry的形式存放在链表数组中的,




ConcurrentHashMap的get、put、remove都是先利用key的hash值找到对应的segment之后,再通过segment定位到要查找的元素。


参考链接:http://www.iteye.com/topic/1103980



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值