由於一些人已經注意到並遇到HashMap.put
可以進入同時使用時,一個無限循環執行(見GRIZZLY-1207,JGRP-525,可能HHH-6414,而這SO answer )。解釋造成HashMap.put時機()來執行一個無限循環
HashMap
明確記錄爲非線程安全。顯然,正確的解決方案是特別使用Map
,ConncurrentHashMap
的線程安全實現。我更加好奇導致無限循環的併發時序。我最近用Java 7 JRE遇到了這個循環,並想了解確切的原因。例如,這是由多個投入同時引起的嗎?
HashMap.put裏面的內容顯示HashMap.Entry
包含到下一個節點的鏈接(在存儲桶中?)。我認爲這些鏈接越來越腐敗,包含循環引用,這是導致無限循環。但是,我仍然不清楚腐敗是如何發生的。