ConcurrentHashMap之remove()方法源码分解

本文详细解析了ConcurrentHashMap中remove方法的实现原理,包括其内部replaceNode方法的具体流程,涉及散列计算、自旋循环、同步锁使用、链表和红黑树节点处理等方面。

public V remove(Object key) { return replaceNode(key, null, null); }

    /**
     * Implementation for the four public remove/replace methods:
     * Replaces node value with v, conditional upon match of cv if
     * non-null.  If resulting value is null, delete.
     */
    final V replaceNode(Object key, V value, Object cv) {
   
   
        //计算key经过扰动运算后的hash
        int hash = spread(key.hashCode());
        //自旋
        for (Node<K,V>[] tab = table;;) {
   
   
            //f表示桶位头结点
            //n表示当前table数组长度
            //i表示hash命中桶位下标
            //fh表示桶位头结点 hash
            Node<K,V> f; int n, i, fh;

            //CASE1:
            //条件一:tab == null  true->表示当前map.table尚未初始化..  false->已经初始化
            //条件二:(n = tab.length) == 0  true->表示当前map.table尚未初始化..  false->已经初始化
            //条件三:(f = tabAt(tab, i = (n - 1) & hash)) == null true -> 表示命中桶位中为null,直接break, 会返回
            if (tab == null || (n = tab.length) == 0 ||
                (f = tabAt(tab, i = (n - 1) & hash)) == null)
                break;

            //CASE2:
            //前置条件CASE2 ~ CASE3:当前桶位不是null
            //条件成立:说明当前table正在扩容中,当前是个写操作,所以当前线程需要协助table完成扩容。
            else if ((fh 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值