博客
关于我
ConcurrentHashMap了解吗?说说实现原理。
阅读量:610 次
发布时间:2019-03-12

本文共 726 字,大约阅读时间需要 2 分钟。

HashMap 和 Hashtable 的主要差异,在于 ConcurrentHashMap 的优势:

  • 线程安全与性能权衡

    • HashMap 是线程不安全的,效率极高。
    • Hashtable 是线程安全的,但效率较低。
  • ConcurrentHashMap 的优势

    • 借助分段锁(Segment锁),实现线程安全的同时保持较高的效率。
  • JDK 1.7 的实现细节

    • 结合数组和链表,Segment 数组管理多个 HashEntry。
    • value 和链表使用 volatile 保证可见性。
    • 采用分段锁,吞吐量较高。每个 Segment 锁独立,不互相影响。
  • ConcurrentHashMap 的区域锁逻辑-尝试加锁加锁失败自旋,超过 MAX_SCAN_RETRIES 后改为阻塞锁。

    • 查找目标位置,判断是否需要覆盖或新建节点,并扩容。-释放锁后再进行数据操作。
  • JDK 1.8 的改进-摒弃传统的分段锁,以 CAS 和 synchronized 优化性能。-节点结构优化(Node替代HashEntry)。

    • volatile 关键字增广至 value 和 next,提升可见性。
  • 性能提升

    • 链表长度上限调整为8个,改用红黑树提高查询效率至 O(log n)。
    • 使用 synchronized 锁性能与传统 ReentrantLock 并驾齐驱。
  • 链表与红黑树对比

    • 长链表转换为红黑树优化查找性能。
  • 推荐面试题

    • 理解 ConcurrentHashMap 的载荷分配策略。
    • 掌握 put 和 get 方法的线程安全机制。
  • 经过多次优化,该内容更具可读性,同时适合技术面试准备。未在此展开完整的题目列表,但此内容涵盖了ConcurrentHashMap的核心知识点。

    转载地址:http://elaxz.baihongyu.com/

    你可能感兴趣的文章
    numpy.linalg.norm(求范数)
    查看>>
    Numpy.ndarray对象不可调用
    查看>>
    Numpy.VisibleDeproationWarning:从不整齐的嵌套序列创建ndarray
    查看>>
    Numpy:按多个条件过滤行?
    查看>>
    Numpy:条件总和
    查看>>
    numpy、cv2等操作图片基本操作
    查看>>
    numpy中的argsort的用法
    查看>>
    NumPy中的精度:比较数字时的问题
    查看>>
    numpy判断对应位置是否相等,all、any的使用
    查看>>
    Numpy多项式.Polynomial.fit()给出的系数与多项式.Polyfit()不同
    查看>>
    Numpy如何使用np.umprod重写range函数中i的python
    查看>>
    numpy学习笔记3-array切片
    查看>>
    numpy数组替换其中的值(如1替换为255)
    查看>>
    numpy数组索引-ChatGPT4o作答
    查看>>
    numpy最大值和最大值索引
    查看>>
    NUMPY矢量化np.prod不能构造具有超过32个操作数的ufunc
    查看>>
    Numpy矩阵与通用函数
    查看>>
    numpy绘制热力图
    查看>>
    numpy转PIL 报错TypeError: Cannot handle this data type
    查看>>
    Numpy闯关100题,我闯了95关,你呢?
    查看>>