ConcurrentHashMap在JDK1.7与1.8有什么差别???

简介: ConcurrentHashMap在JDK1.7与1.8有什么差别???

一、JDK1.7


数据结构: ReentrantLock+Segment+HashEntry, - 个Segment中包含一个HashEntry数组, 每个HashEntry又是一个链表结构

**元素查询:**二 二次hash,第-次Hash定位到Segment, 第二次Hash定位到元素所在的链表的头部

锁: Segment分段锁Segment继承了ReentrantLock,锁定操作的Segment,其他的Segment不受影响,并发度为segment个数,可以通过构造函数指定,数组扩容不会影响其他的segment

get方法无需加锁,volatile保证


二、JDK1.8:


数据结构: synchronized+CAS+Node+红黑树, Node的val和next都用volatile修饰, 保证可见性

查找,替换,赋值操作都使用CAS

**锁:**锁链表的head节点,不影响其他元素的读写,锁粒度更细,效率更高,扩容时,阻塞所有的读写操作、并发

扩容

读操作无锁:

Node的val和next使用volatile修饰,读写线程对该变量互相可见

数组用volatile修饰,保证扩容时被读线程感知

目录
相关文章
|
8月前
|
存储 安全 Java
【JDK 源码分析】ConcurrentHashMap 底层结构
【1月更文挑战第27天】【JDK 源码分析】ConcurrentHashMap 底层结构
|
5月前
|
存储 Java
【Java集合类面试七】、 JDK7和JDK8中的HashMap有什么区别?
JDK7中的HashMap使用数组加链表解决冲突,而JDK8增加了红黑树结构以优化链表过长时的性能,提高查找效率。
|
8月前
|
存储 Java 索引
【亮剑】Java中的并发容器ConcurrentHashMap,它在JDK1.5中引入,用于替换HashTable和SynchronizedMap
【4月更文挑战第30天】本文介绍了Java中的并发容器ConcurrentHashMap,它在JDK1.5中引入,用于替换HashTable和SynchronizedMap。文章展示了创建、添加、获取、删除和遍历元素的基本用法。ConcurrentHashMap的内部实现基于分段锁,每个段是一个独立的Hash表,通过分段锁实现并发控制。每个段内部采用数组+链表/红黑树的数据结构,当冲突过多时转为红黑树优化查询。此外,它有扩容机制,当元素超过阈值时,会逐段扩容并翻倍Segment数量,以保持高性能的并发访问。
69 0
|
8月前
|
机器学习/深度学习 存储 Java
认真学习jdk1.8下ConcurrentHashMap的实现原理
认真学习jdk1.8下ConcurrentHashMap的实现原理
66 0
认真学习jdk1.8下ConcurrentHashMap的实现原理
|
8月前
|
安全 Java 索引
认真学习jdk1.7下ConcurrentHashMap的实现原理
认真学习jdk1.7下ConcurrentHashMap的实现原理
125 0
|
存储 安全 算法
HashMap为什么在多线程操作下不安全(jdk1.7和jdk1.8原因不同)
HashMap为什么在多线程操作下不安全(jdk1.7和jdk1.8原因不同)
103 0
|
存储 算法 安全
JDK1.8中的ConcurrentHashMap使用及场景分析
JDK1.8中的ConcurrentHashMap使用及场景分析
JDK1.8中的ConcurrentHashMap使用及场景分析
|
算法 Java 索引
Jdk1.8 HashMap实现原理详细介绍
Jdk1.8 HashMap实现原理详细介绍
Jdk1.8 HashMap实现原理详细介绍
|
存储 安全 算法
HashMap源码分析(jdk1.8,保证你能看懂)
现在的面试当中凡是那些大厂,基本上都会问到一些关于HashMap的问题了,而且这个集合在开发中也经常会使用到。于是花费了大量的时间去研究分析写了这篇文章。本文是基于jdk1.8来分析的。篇幅较长,但是都是循序渐进的。耐心读完相信你会有所收获。
247 0
HashMap源码分析(jdk1.8,保证你能看懂)