博客
关于我
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实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现9x9乘法表算法(附完整源码)
    查看>>
    Objective-C实现9×9二维数组数独算法(附完整源码)
    查看>>
    Objective-C实现A*(A-Star)算法(附完整源码)
    查看>>
    Objective-C实现A-Star算法(附完整源码)
    查看>>
    Objective-C实现abbreviation缩写算法(附完整源码)
    查看>>
    Objective-C实现ABC人工蜂群算法(附完整源码)
    查看>>
    Objective-C实现activity selection活动选择问题算法(附完整源码)
    查看>>
    Objective-C实现AC算法(Aho-Corasick) 算法(附完整源码)
    查看>>
    Objective-C实现adaboost算法(附完整源码)
    查看>>
    Objective-C实现Adler32算法(附完整源码)
    查看>>
    Objective-C实现AES算法(附完整源码)
    查看>>
    Objective-C实现AffineCipher仿射密码算法(附完整源码)
    查看>>
    Objective-C实现aliquot sum等分求和算法(附完整源码)
    查看>>
    Objective-C实现all combinations所有组合算法(附完整源码)
    查看>>
    Objective-C实现all permutations所有排列算法(附完整源码)
    查看>>
    Objective-C实现all subsequences所有子序列算法(附完整源码)
    查看>>
    Objective-C实现AlphaNumericalSort字母数字排序算法(附完整源码)
    查看>>
    Objective-C实现alternate disjoint set不相交集算法(附完整源码)
    查看>>