美文网首页
2020-08-08:ConcurrentHashMap学习

2020-08-08:ConcurrentHashMap学习

作者: Mr钧 | 来源:发表于2020-08-08 13:11 被阅读0次

    Java8中ConcurrentHashMap的结构

    桶里的结构 : Node<K,V>

    ForwardingNode : 头节点,类似哨兵的功能吧? 

    ConcurrentHashMap中的原子操作

    全部用的时Unsafe的方法,这个Unsafe方法要了解下

    ConcurrentHashMap的功能实现

    1.ConcurrentHashMap初始化

    重要的参数sizeCtl :初始化和扩容都有用到 ;PS:含义丰富,

    CHM的初始化,只是初始化参数; table的初始化是在put第一个元素时进行

    2.ConcurrentHashMap的put方法

    onlyIfAbsent 用来控制Node节点key,hashCode相同时,是否进行value替换。 true:不替换; false:替换。

    实验: 

    ConcurrentHashMap cmap =new ConcurrentHashMap();

    cmap.put("1","1");

    cmap.put("1","2");

    cmap.put("1","3");

    然后调用get("1");  结果是:3;

    结论: 默认情况下,onlyIfAbsent  为true; 多次put同一个key,会产生多个Node;但是只能访问最后一个put的Node;

    当桶内节点达到8个,会由链表转为红黑树

    ConcurrentHashMap的扩容机制

    ConcurrentHashMap的get方法

    当存在key不同但hashcode相同的节点时,调用get方法会遍历所以在桶下的所有Node;

    参考链接: https://blog.csdn.net/programerxiaoer/article/details/80040090

    相关文章

      网友评论

          本文标题:2020-08-08:ConcurrentHashMap学习

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