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

    你可能感兴趣的文章
    python--003--百分号字符串拼接、format
    查看>>
    Python--10、线程
    查看>>
    Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
    查看>>
    python--基本代码规范
    查看>>
    Python--抽象类接口类
    查看>>
    PYTHON--欧拉习题二
    查看>>
    python--高级应用总结
    查看>>
    python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
    查看>>
    Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
    查看>>
    Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
    查看>>
    Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
    查看>>
    python出现 unknown encoding: idna 的处理方法
    查看>>
    Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
    查看>>
    Python-numpy(2)数组的操作
    查看>>
    Python-Numpy的tile函数用法
    查看>>
    python-open函数
    查看>>
    Python-Pandas-将特定函数应用于给定级别-多索引数据框架
    查看>>
    python-queue队列通信
    查看>>
    python-ros No module named PyKDL
    查看>>
    python-social-auth 是否需要会话
    查看>>