深入理解JDK1.8 ConcurrentHashMap

1、整体结构

     JDK1.8的ConcurrentHashMap的内部结构与JDK 1.7有很大区别,1.8可以理解为只是简单的数组+链表+红黑树的结构。【但是如何保证线程安全的呢,下面说】

2、主要变量

      TreeBin:红黑树对象【包含红黑树节点属性TreeNode】

3、put过程 table[index]处第一个节点的存放线程安全通过CAS来控制;而table[index]处的链表或者红黑树通过synchronized(table[index]),也就是锁住table[index]出的第一个节点来保证线程安全。

 

3.1初始化table

3.2、链表转红黑树过程:

4、扩容

     1.8的ConcurrentHashMap扩容比较复杂,它同时支持多个线程并发扩容,进行迁移的那个节点不允许put,通过synchronized  table[index]节点进行控制,但是还未进行迁移的节点允许put【好绕好绕,需要大家仔细去研究了,小弟无能为力了,绕不出来了】

5、get过程

     与1.7的基本啥差异

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值