建设企业网站企业,巨好用网络企业管理系统,深圳属于广东省吗,好用的在线设计网站从这三个方面来回答#xff1a; ConcurrentHashMap 的整体架构 ConcurrentHashMap 的基本功能 ConcurrentHashMap 在性能方面的优化 ConcurrentHashMap 的整体架构 这个是 ConcurrentHashMap 在 JDK1.8 中的存储结构#xff0c;它是由数组、单向链表、红黑树组成. 当我们初始… 从这三个方面来回答 ConcurrentHashMap 的整体架构 ConcurrentHashMap 的基本功能 ConcurrentHashMap 在性能方面的优化 ConcurrentHashMap 的整体架构 这个是 ConcurrentHashMap 在 JDK1.8 中的存储结构它是由数组、单向链表、红黑树组成. 当我们初始化一个ConcurrentHashMap实例时,默认会初始化一个长度为16的数组。由于ConcurrentHashMap的核心仍然是 hash 表,所以必然会存在 hash 冲突问题.ConcurrentHashMap 采用链式寻址法来解决 hash 冲突。.当 hash 冲突比较多的时候会造成链表长度较长这种情况会使得ConcurrentHashMap 中数据元素的查询复杂度变成 O(n)。因此在 JDK1.8 中引入了红黑树的机制。当数组长度大于 64 并且链表长度大于等于 8 的时候单项链表就会转换为红黑树。另外随着 ConcurrentHashMap 的动态扩容一旦链表长度小于 8红黑树会退化成单向链表 ConcurrentHashMap 的基本功能 ConcurrentHashMap 本质上是一个 HashMap因此功能和 HashMap 一样但是CocurrentHash Map 在 HashMap 的基础上提供了并发安全的实现。并发安全的主要实现是通过对指定的 Node节点加锁来保证数据更新的安全性。 ConcurrentHashMap 在性能方面做的优化 如果在并发性能和数据安全性之间做好平衡在很多地方都有类似的设计比如 cpu的三级缓存、mysql 的 buffer_pool、Synchronized 的锁升级等等。ConcurrentHashMap 也做了类似的优化主要体现在以下几个方面 在 JDK1.8 中ConcurrentHashMap 锁的粒度是数组中的某一个节点而在JDK1.7锁定的是 Segment锁的范围要更大因此性能上会更低。 引入红黑树降低了数据查询的时间复杂度红黑树的时间复杂度是 O(logn)。 当数组长度不够时ConcurrentHashMap 需要对数组进行扩容在扩容的实现上ConcurrentHashMap 引入了多线程并发扩容的机制简单来说就是多个线程对原始数组进行分片后每个线程负责一个分片的数据迁移从而提升了扩容过程中数据迁移的效率。 ConcurrentHashMap 中有一个 size()方法来获取总的元素个数而在多线程并发场景中在保证原子性的前提下来实现元素个数的累加性能是非常低的。ConcurrentHashMap 在这个方面的优化主要体现在两个点
当线程竞争不激烈时直接采用 CAS 来实现元素个数的原子递增。如果线程竞争激烈使用一个数组来维护元素个数如果要增加总的元素个数则直接从数组中随机选择一个再通过 CAS 实现原子递增。它的核心思想是引入了数组来实现对并发更新的负载。