• ConcurrentHashMap以及HashMap,HashTable的区别


    ConcurrentHashMap与HashMap,和HashTable 的区别?

    ConcurrentHashMap是一个线程安全的key-value数据结构,而HashMap不是。
    ConcurrentHashMap的数据结构是 数组 + 数组 + 单向链表。HashMap的数据结构是 数组 + 单向列表

    HashTable也是线程安全,HashTable与HashMap的存储结构相同,HashTable不允许null为key值,而HashMap允许
    ConcurrentHashMap是HashTable的升级版,线程均安全,但是拥有不同的数据结构,和不同的性能。
    Map使用Collections.synchronizedMap 允许需要同步的用户可以拥有同步,提供的有条件的线程安全性。

    ConcurrentHashMap在1.7的实现是 初始化时默认初始化16个seqment,每个seqment中都会有一个与hashmap相同的HashEntry结构,采用数组 + 单向链表的方式组织KV数据的存储。在进行PUT时,会在hash到的seqment中加锁,锁的粒度为seqment而不是整个map。

    --为啥要这么设计?减少热点,以提高并发能力。这就是与HashTable的区别。

    而在1.8中,ConcurrentHashMap采用数组+单向链表+红黑树结合的方式来组织数据以提高读写性能.

    ConcurrentHashMap中不再存在seqment,而是直接用Entry[]数据,减小加锁的粒度,提升写的性能。
    ConcurrentHashMap中当单向链表中元素的个数超过8时,改用红黑树的存储结构以提高查询的速度。

     

  • 相关阅读:
    解决:Cuda安装后找不到安装文件目录
    学习论文:Eyeriss v1
    AOD-NET除雾算法
    学习论文AOD-Net:All-in-One Dehazing Network
    学习ResNeXt
    CentOS-7.6-ARM 离线安装部署FastDFS
    CentOS ARM离线安装部署Mysql5.6.44
    NFS+SnapShot快照式备份迁移ES索引过程
    《无限可能:快速唤醒你的学习脑》
    Oracle用sqlplus无法登陆?
  • 原文地址:https://www.cnblogs.com/zhoukedou/p/6843462.html
Copyright © 2020-2023  润新知