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

    你可能感兴趣的文章
    php接收formdata上传的多个文件,使用formData()上传多个文件
    查看>>
    PHP操作csv文件导入+导出
    查看>>
    php操作mysql用select_php如何操作mysql获取select 结果
    查看>>
    PHP操作符与控制结构
    查看>>
    PHP支付宝SDK使用,电脑网页支付
    查看>>
    php支付宝手机网页支付类实例
    查看>>
    PHP改变数组key值的方法
    查看>>
    php教程之php空白页的原因及解决方法
    查看>>
    PHP数据库操作
    查看>>
    PHP数据文件过大,导致PHP加速器eaccelerator在PHP5.2版本下崩溃
    查看>>
    RabbitMQ - 死信、TTL原理、延迟队列安装和配置
    查看>>
    PHP数据访问的多重查询(租房子查询)
    查看>>
    RabbitMQ - 如保证消息的可靠性?(消息确认、消息持久化、失败重试机制)
    查看>>
    RabbitMQ - 基于 SpringAMQP 带你实现五种消息队列模型
    查看>>
    php数组函数分析--array_column
    查看>>
    php数组去重复数据的小例子
    查看>>
    php数组实现:哈希 +双向链表
    查看>>
    PHP数组排序函数array_multisort()函数详解(二)
    查看>>
    php数组的几个函数和超全局变量
    查看>>
    PHP文件上传详解
    查看>>