码迷,mamicode.com
首页 > 其他好文 > 详细

ConcurrentHashMap 源码

时间:2018-08-17 12:10:43      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:线程安全   数据结构   数组   引用   tree   后继节点   current   线程   情况   

1、一个栏位(hashmap数组的一个位置),放置的node有这几种可能:A----null;B----链表的头节点,这是的hash值和后继节点的hash值是一样的,而且和数组位置也是一一对应的,是个正数;C----transfer中,会把hash值为-1(MOVED)的一个firstNode放在这里,标志这个位置正在被transfer;D----红黑树的TreeBin,继承了Node,构造函数中给Node的hash值赋值-2. 所以综合来说,可以根据头节点的hash值判断当前栏位的情况。

2、ConcurrentHashMap 是一个线程安全的数据结构,要解决两个不安全的地方:读写冲突,和写写(增删改)冲突。读是不加锁的,这点很厉害,也挺有意思值得研究。

  A:transfer的时候,不是像hashmap那样对一个链表进行拆分,这样会导致读的时候一路next的时候出现断裂,而是保持原先的链式数据结构不变,扩容后的两个栏位,对之前的链表进行分别引用。(红黑树的情况呢?)

ConcurrentHashMap 源码

标签:线程安全   数据结构   数组   引用   tree   后继节点   current   线程   情况   

原文地址:https://www.cnblogs.com/chuliang/p/9492569.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!