调试JDK源码-ConcurrentHashMap实现原理

本文通过调试JDK源码深入分析了ConcurrentHashMap的实现原理,指出其线程安全是通过在无冲突时使用compareAndSwapObject进行节点插入,冲突时锁定冲突节点来保证的。相较于Hashtable,ConcurrentHashMap的性能更好,因为它不对整个put方法加锁。文章详细阐述了put过程,展示了从首次初始化到后续插入的完整流程,并解释了CAS(Compare and Swap)在其中的作用。
摘要由CSDN通过智能技术生成

调试JDK源码-一步一步看HashMap怎么Hash和扩容

调试JDK源码-ConcurrentHashMap实现原理

调试JDK源码-HashSet实现原理

调试JDK源码-调试JDK源码-Hashtable实现原理以及线程安全的原因

 

ConcurrentHashMap线程安全的总结是我从源码分析出来的:

ConcurrentHashMap所谓线程安全是如果没有哈希冲突使用compareAndSwapObject方式新增节点,如果哈希冲突的时候锁住哈希冲突的节点,这样新增的节点是线程安全的,而 ConcurrentHashMap又不像hashtable那样整个put方法被锁定,所以性能比hashtable要好,因为这样不影响其他节点的插入和读取。

具体看下面完整的分析过程就知道了。

Map<String, String> cm = new ConcurrentHashMap<String, String>();
        for (int i = 0; i < 20; i++) {
            cm.put((char) (i + 65) + (char) (i + 66) + (char) (i + 67) + "", i + ">>>http://blog.csdn.net/unix21/");
        }


注释写的很清楚

/* ---------------- Public operations -------------- */

    /**
     * Creates a new, empty map with the default initial table size (16).
     */
    public ConcurrentHashMap() {
    }


再到

public abstract class AbstractMap<K,V> implements Map<K,V> {
    /**
     * Sole constructor.  (For invocation by subclass constructors, typically
     * implicit.)
     */
    protected AbstractMap() {
    }

    // Query Operations

    /**
     * {@inheritDoc}
     *
     * @implSpec
     * This implementation returns <tt>e
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值