美文网首页
1.8版本ConcurrentHashMap 相关问题

1.8版本ConcurrentHashMap 相关问题

作者: 泠墨1017 | 来源:发表于2018-01-15 20:02 被阅读0次

1:简单描述

      1.8版本的与之前版本的ConcurrentHashMap相比,设计理念有很大的调整,之前的版本,主要用到分段加锁,即segment+数组+链表的方式,1.8版本采用cas和锁,并且锁的粒度更细,针对桶进行加锁,结构是数组+链表+红黑树

2:常见问题

    A:get是否需要加锁?为什么?

        concurrentHashMap 内部定义了volatile 字段 tab,类型是Node,且node属性val 和next也都是volatile类型,因此保证了每次读取的时候都是从内存中读取到最新的值。

    B:get的时候,如果正好遇到扩容,会怎么样?

        其实通过源码我们知道get的逻辑非常简单,1:如果hash相等,且key相同,那么直接返回val ;2:如果hash小于0 ,那么可能是forwardNode或者treeBin,分别采用对应的find方法进行查找,其中forwardNode表示该节点已经被移动到nextTab中,所以扩容不影响get。3:如果hash大于0,那么通过链表遍历出对应的节点。

相关文章

网友评论

      本文标题:1.8版本ConcurrentHashMap 相关问题

      本文链接:https://www.haomeiwen.com/subject/lswdoxtx.html