博客
关于我
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/

    你可能感兴趣的文章
    Objective-C实现Farey Approximation近似算法(附完整源码)
    查看>>
    Objective-C实现Fast Powering算法(附完整源码)
    查看>>
    Objective-C实现Fedwick树算法(附完整源码)
    查看>>
    Objective-C实现fenwick tree芬威克树算法(附完整源码)
    查看>>
    Objective-C实现FenwickTree芬威克树算法(附完整源码)
    查看>>
    Objective-C实现fermat little theorem费马小定理算法(附完整源码)
    查看>>
    Objective-C实现FermatPrimalityTest费马素数测试算法(附完整源码)
    查看>>
    Objective-C实现fft2函数功能(附完整源码)
    查看>>
    Objective-C实现FFT快速傅立叶变换算法(附完整源码)
    查看>>
    Objective-C实现FFT算法(附完整源码)
    查看>>
    Objective-C实现fibonacci search斐波那契查找算法(附完整源码)
    查看>>
    Objective-C实现fibonacci斐波那契算法(附完整源码)
    查看>>
    Objective-C实现fibonacci斐波那契算法(附完整源码)
    查看>>
    Objective-C实现FigurateNumber垛积数算法(附完整源码)
    查看>>
    Objective-C实现finding bridges寻找桥梁算法(附完整源码)
    查看>>
    Objective-C实现first come first served先到先得算法(附完整源码)
    查看>>
    Objective-C实现FTP文件上传(附完整源码)
    查看>>
    Objective-C实现fuzzy operations模糊运算算法(附完整源码)
    查看>>
    Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
    查看>>
    Objective-C实现gamma recursive伽玛递归算法(附完整源码)
    查看>>