ConcurrentHashmap进行添加元素操作的源码分析以及注释。

ConcurrentHashmap进行添加元素操作的源码分析以及注释。

  1. 判断需要插入的key/vlaue是否为null。
  2. 计算hash。
  3. 遍历存放数据的Node数组,并判断数组是否为空,为空则进行初始化。
  4. 根据算出数组下标并判断该点是否为空,若为空,cas尝试添加操作。
  5. 判断数组是否正在进行扩容,正在扩容协助其进行扩容。
  6. 对该node节点进行加锁操作,并进行元素插入。
  7. 判断链表长度,并尝试是否需要进行红黑树转化。
  8. 维护数组长度,并判断是否需要进行扩容操作。
/** Implementation for put and putIfAbsent */
final V putVal(K key, V value, boolean onlyIfAbsent) {
   
    //如果key值或者value为空,则报空指针。concurrenthashmap不允许key、value为空
    if (key == null || value == null) throw new NullPointerException();
    //计算hash值
    int hash = spread(key.hashCode());
    int binCount = 0;
    //遍历存放数据的Node数组
    for (Node<K,V>[] tab = table;;) {
   
        Node<K,V> f; int n, i, fh;
        //如果数组为空,则进行初始化操作。
        if (tab == null || <
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值