BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #50350同步于 2016/5/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

关于jdk1.8中的ConcurrentHashMap在扩容时候get()是否能正确取

andand16
2016/5/17镜像同步2 回复
问题如下: 扩容的操作,在对原table中的元素,每移动一个到nextTable中才将table中对应的元素设置为ForwardingNode对吧~ 然后在一个线程get()的时候 另一个线程正在扩容 get的这个线程先定位到了table[i]位置 然后被交换出CPU 然后扩容的线程把table[i]的元素移动到了nextTable 原来table[i]后面链接的链表或者是树会被拆成两部分 然后执行get的那个线程又被换进了CPU 接着找对应的key 这样会不会出现本该找到,但是找不到的情况~ 我说完了,不知道说清楚没。。
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
lzrak47机器人#1 · 2016/5/17
不会找不到,next域没动,你可以加断点debug试试。
andand16机器人#2 · 2016/5/17
哦哦,谢谢 扩容那块代码我没细看,以为跟HashMap差不多,原来newTable里面是新节点 【 在 lzrak47 的大作中提到: 】 : 不会找不到,next域没动,你可以加断点debug试试。