По мере того, как ряд людей отметил и столкнулся с HashMap.put
, он может перейти в бесконечный цикл выполнения при одновременном использовании (см. GRIZZLY-1207, JGRP-525, возможно HHH-6414, и этот SO ответ).
HashMap
четко задокументирован как небезопасный поток. Очевидно, что правильное исправление заключается в использовании поточно-безопасной реализации Map
, ConncurrentHashMap
в частности. Мне больше любопытно о параллельном времени, которое вызывает бесконечный цикл. Недавно я столкнулся с этим циклом с Java JRE JRE и хотел бы понять точные причины. Например, это вызвано несколькими puts в одно и то же время?
Загляните внутрь HashMap.put показывает, что HashMap.Entry
содержит ссылку на следующий node (в ведре?). Я предполагаю, что эти ссылки становятся развратными, чтобы содержать циклические ссылки, которые вызывают бесконечный цикл. Тем не менее, я до сих пор не понимаю, как именно происходит коррупция.