首页 > 其他 > 详细

ConcurrentHashMap的get、put、size

时间:2016-04-14 01:28:31      阅读:366      评论:0      收藏:0      [点我收藏+]

ConcurrentHashMap的get操作

get操作的高效之处在于整个get过程不需要加锁,get方法里将要使用的共享变量都定义成volatile。

ConcurrentHashMap的Put操作

在操作共享变量时必须得加锁。Put方法首先定位到Segment,然后在Segment里进行插入操作。插入操作需要经历两个步骤,第一步判断是否需要对Segment里的HashEntry数组进行扩容,第二步定位添加元素的位置然后放在HashEntry数组里。为了高效ConcurrentHashMap不会对整个容器进行扩容,而只对某个segment进行扩容。

ConcurrentHashMap的size操作

concurrentHashMap的做法是先尝试2次通过不锁住Segment的方式来统计各个Segment大小,如果统计的过程中,容器的count发生了变化,则再采用加锁的方式来统计所有Segment的大小。那么ConcurrentHashMap是如何判断在统计的时候容器是否发生了变化呢?使用modCount变量,在put , remove和clean方法里操作元素前都会将变量modCount进行加1,那么在统计size前后比较modCount是否发生变化,从而得知容器 的大小是否发生变化。

ConcurrentHashMap的get、put、size

原文:http://www.cnblogs.com/wzyxidian/p/5389473.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!