社区
Java SE
帖子详情
求助!java1.8中ConcurrentHashMap中的put方法用到了树,而get方法却用的链表获取呢?
plutoppppp
2020-07-22 11:27:22
RT!RT!RT!RT!RT!RT!RT!RT!RT!RT!
...全文
114
2
打赏
收藏
求助!java1.8中ConcurrentHashMap中的put方法用到了树,而get方法却用的链表获取呢?
RT!RT!RT!RT!RT!RT!RT!RT!RT!RT!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
plutoppppp
2020-07-22
打赏
举报
回复
结帖了,是我逗逼了,get方法中有个find函数,TreeNode重写了这个方法!!!!尴尬!!!!!!!!!!!
plutoppppp
2020-07-22
打赏
举报
回复
get方法,直接取得next进行比较,用的链表结构:
put方法,有转树的过程:
Java
并发包源码分析(JDK
1.8
)
Java
并发包源码分析(JDK
1.8
):囊括了
java
.util.concurrent包
中
大部分类的源码分析,其
中
涉及automic包,locks包(AbstractQueuedSynchronizer、ReentrantLock、ReentrantReadWriteLock、LockSupport等),queue...
JDK
1.8
的
ConcurrentHashMap
的put、get 工作原理
JDK
1.8
的
ConcurrentHashMap
put总结: 如果没有初始化就先调用initTable()
方法
来进行初始化过程 如果没有hash冲突就直接CAS插入 如果还在进行扩容操作就先进行扩容 如果存在hash冲突,就加锁来保证线程安全,这里有两种情况,一种是
链表
形式就直接遍历到尾端插入,一种是红黑
树
就按照红黑
树
结构插入, 如果Hash冲突时会形成Node
链表
,在
链表
长度超过8,Node数组超过64时会将
链表
结构转换为红黑
树
的结构,break再一次进入循环 如果添加成功就调用addCo
ConcurrentHashMap
(JDK
1.8
)put分析(一)
ConcurrentHashMap
和HashMap的put值过程有些类似,
ConcurrentHashMap
的结构也是table +
链表
+ 红黑
树
;在put值时,锁粒度是table的元素;也就是说,当put值时定位到table的第 i 个元素,那么就会给table[i]上锁;其他线程在put值时也定位到 i 时就需要等待
获取
锁;如果是其他位置则不需要等待锁,可以进行put操作。 下面具体分析
ConcurrentHashMap
的put值过程
ConcurrentHashMap
在
关于jdk
1.8
中
ConcurrentHashMap
的方方面面
前言
Java
JDK升级到
1.8
后有些集合类的实现有了变化,其
中
ConcurrentHashMap
就有进行结构上的大调整。jdk1.6、1.7实现的共同点主要是通过采用分段锁Segment减少热点域来提高并发效率,
1.8
版本的实现有哪些变化呢? 重要概念 在正式研究前,我们需要先知道几个重要参数,提前说明其值所代表的意义以便更好的讲解源码实现。 table 所有数据都存在tab...
jdk
1.8
中
ConcurrentHashMap
的并发原理
ConcurrentHashMap
的并发原理 我们都知道jdk
1.8
之前
ConcurrentHashMap
是采用分段锁的机制允许多线程并发操作一个
ConcurrentHashMap
的方式来提高并发的,它的主要思想是优化HashTable
中
全局锁,让锁更加细粒度来达到更高的并发度的。 但是JDK
1.8
里面的
ConcurrentHashMap
则完全不一样,它
用到
了CAS思想,使用的是乐观锁思想,乐观锁...
Java SE
62,614
社区成员
307,327
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章