请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

第二步操作
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的是不会转成红黑树的https://img1.sycdn.imooc.com//szimg/5c147700000169dd15001500.jpg

1 回复 有任何疑惑可以回复我~
  • Jimin #1
    大于等于8
    回复 有任何疑惑可以回复我~ 2018-12-15 11:38:10
  • 提问者 寒暄丶 回复 Jimin #2
    意思就是对每个链表都适用 只要某个链表长度大于等于8就会转了   是这样的话就明白了~
    回复 有任何疑惑可以回复我~ 2018-12-15 18:38:39
Jimin 2018-12-15 11:34:45

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

0 回复 有任何疑惑可以回复我~
Jimin 2018-12-15 11:33:32

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信