你知道HashMap在高并发下可能会出现哪些问题吗( 六 )
3)一切安好。
线程一接着工作。把key(7)摘下来,放到newTable[i]的第一个,然后把e和next往下移。
4)环形链接出现。
e.next = newTable[i] 导致 key(3).next 指向了 key(7)
注意:此时的key(7).next 已经指向了key(3), 环形链表就这样出现了。
于是,当我们的线程一调用到,HashTable.get(11)时,悲剧就出现了——Infinite Loop。
针对上面的分析模拟这个例子,
这里在run中执行了一个自增操作,i++非原子操作,使用AtomicInteger避免可能出现的问题:
public static void main(String[] args){ MapThread t0 = new MapThread(); MapThread t1 = new MapThread(); // 省略 t2-t9 t0.start(); t1.start(); // 省略 t2-t9}
推荐阅读
- |传世群英版你那些你不知道的魅力
- 微软|微软Xbox 20周岁了,但这些密辛你未必知道
- 剑三|同为老五门,却势如水火!剑三奶花与天策的恩怨只有老玩家才知道
- 提莫|不看不知道,一看居然有点搞笑,原来女警的二技能名字是用来抓提莫的!!!!
- 热血传奇|热血传奇:神豪般的财力到底是何方神圣,你知道吗?
- 游戏推荐|11月游戏推荐,每年的游戏黄金月份,你还在不知道玩什么吗?
- 暗黑破坏神|暗黑2重制版你知道角色最高能获得多少技能点么?
- edg战队|“Viper不会离开EDG”,经纪人怒斥:我都不知道,你们就知道了?Nuguri不会加入DK
- 电子竞技|武将外号,你都知道几个?老玩家:这不是我先开始这么叫的吗!
- s11全球总决赛|炉石传说平衡补丁公布,2400点奥术之尘,不知道你能拿到多少?