解释导致HashMap.put()执行无限循环的时序
正如许多人已经注意到和遇到的那样,当同时使用时可以进入无限的执行循环(参见GRIZZLY-1207,JGRP-525,可能是HHH-6414,以及这个SO答案)。HashMap.put
HashMap
被清楚地记录为非线程安全。显然,正确的解决方法是使用 的线程安全实现,特别是。我对导致无限循环的并发时序感到好奇。我最近在Java 7 JRE上遇到了这个循环,并希望了解确切的原因。例如,这是由同时进行多个看跌期权引起的吗?Map
ConncurrentHashMap
查看HashMap.put内部显示,其中包含指向下一个节点(在存储桶中?)的链接。我假设这些链接正在损坏以包含循环引用,这导致了无限循环。但是,我仍然不明白这种腐败是如何发生的。HashMap.Entry