HashMap多线程并发下死循环问题

来源:9-4 HashMap与ConcurrentHashMap解析

寒暄丶

2018-12-14

第二步操作
1.多次看了这个片段的视频,有一个疑问,为什么在key为9的元素插入过后,要执行e = next = key(5)的操作,也就是让e指向key为5的元素地址。后续,之前线程二不是已经执行完成了么(完成之后实际结构已经是图下面的结构) ,这里newTable[1] = e意思不是新数组index为1的链表重新赋值为e了么,等于把之前线程二的覆盖了?又如何让线程一插入到首位置的9又指向一个新的5的呢 有点蒙,请老师解答一下,感谢!
2.好像JAVA8不止对ConcurrentHashMap采用了红黑树,HashMap也是如此?
那对HashMap的提升具体是和ConcurrentHashMap一样么 您的视频好像没有讲到 能麻烦老师总结性的讲一下么 谢谢老师~
3.JAVA8在链表长度大于8的意思是只要有一个链表长度大于8(默认情况下)才转换成红黑树么 那如果是有一定数量的链表 但是这些链表长度都是7(8以下)是不会转么

问题比较多 很麻烦老师…希望老师解惑~

写回答

3回答

Jimin

2018-12-15

第三个问题,hashmap本质上是数组+链表的结构,当某个链表长度大于8后会转为红黑树进行存储,这个意思是小于8的是不会转成红黑树的//img.mukewang.com/szimg/5c147700000169dd15001500.jpg

1
2
寒暄丶
回复
Jimin
意思就是对每个链表都适用 只要某个链表长度大于等于8就会转了 是这样的话就明白了~
2018-12-15
共2条回复

Jimin

2018-12-15

第二个问题,hashmap也是如此,这是hashmap存储上的一个优化,本质上和线程安全关系不太大,因此没有做太多分析。

0
0

Jimin

2018-12-15

你好,第一个问题,我们是假设多个线程出现resize操作,然后由于cpu时间片轮转调度,多个线程会交替对同一个hashmap对象进行操作,然后以多线程的角度进行分析的,不同的线程要put的元素不同,交替执行时,演示了线程不安全的一种操作。

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程