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回答
-
第三个问题,hashmap本质上是数组+链表的结构,当某个链表长度大于8后会转为红黑树进行存储,这个意思是小于8的是不会转成红黑树的
122018-12-15 -
Jimin
2018-12-15
第二个问题,hashmap也是如此,这是hashmap存储上的一个优化,本质上和线程安全关系不太大,因此没有做太多分析。
00 -
Jimin
2018-12-15
你好,第一个问题,我们是假设多个线程出现resize操作,然后由于cpu时间片轮转调度,多个线程会交替对同一个hashmap对象进行操作,然后以多线程的角度进行分析的,不同的线程要put的元素不同,交替执行时,演示了线程不安全的一种操作。
00
相似问题