补上一篇文章

1.ConcurrentHashMap的高效并发机制是通过以下三方面来保证的

 通过锁分段技术保证并发环境下的写操;通过 HashEntry的不变性、Volatile变量的内存可见性和加锁重读机制保证高效、安全的读操作;通过不加锁和加锁两种方案控制跨段操作的的安全性。

2.ConcurrentHashMap是如何加锁的

ConcurrentHashMap,它通过在链表上加锁来实现同步的。则看出ConcurrentHashMap其实就多增加了锁的个数,效率效率就提高;而HashTable是通过在每个方法上加Synchronized来实现同步的,这样使得效率略低于ConcurrentHashMap的原因。

3.ConcurrentHashMap的put方法实现步骤

 1、首先,判断key和value是否为null,其中一个为null,则抛出NullPointerException()。

注:ConcurrentHashMap的key和Value都不能为null

 2、计算哈希值:spread(key.hashCode());

3、根据哈希值计算放在table中的位置

4、通过哈希值执行插入或替换操作

如果这个位置没有值,直接将键值对放进去,不需要加锁
如果要插入的位置是一个forwordingNode节点,表示正在扩容,那么当前线程帮     助扩容3.3 加锁。以下操作都需要加锁
如果要插入的节点在链表中,遍历链表中的所有节点,如果某一节点的key哈希值和key与参数相等,替换节点的value,记录被替换的值;如果遍历到了最后一个节点,还没找到key对应的节点,根据参数新建节点,插入链表尾部
如果要插入的节点在树中,则按照树的方式插入或替换节点。如果是替换操作,记录被替换的值
5、判断如果节点数量是大于8,就将链表转化成红黑树(binCount >= TREEIFY_THRESHOLD)
6、如果操作3中执行的是替换操作,返回被替换的value,然后程序结束

7、如果能执行到这一步,说明节点不是被替换的,是被插入的,所以要将map的元素数量加1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值