多线程如何破坏Hashmap的内部结构

Ksh*_*rma 6 java concurrency multithreading java-8

Java 8 for the Really Impatient霍斯特曼写道:

如果多个线程修改普通的HashMap,它们可以破坏内部结构.某些链接可能会丢失,甚至会以圆圈形式出现,从而导致数据结构无法使用.(6.2.1节)

我可以理解,未同步的并发访问可能会破坏我的数据.如果两个线程都更新相同的值,则可以覆盖另一个.

但为什么以及如何破坏内部存储器结构呢?

geo*_*and 12

您正在寻找的答案在博文中得到了很好的解释.

如果您仔细阅读它,您将看到竞争条件可能会破坏存储桶中项目之间的指针,从而导致查找变为两个项目之间的无限遍历.

我不确定HashMapJava 8 的实现有多少变化,但我怀疑基础知识仍然适用.

我还要补充一点,这个问题不难发现,我实际上已经看到它发生在现实生活系统中!