【发布时间】:2023-03-22 01:01:01
【问题描述】:
在Java 8 for the Really ImpatientHorstmann 写道:
如果多个线程修改一个普通的 HashMap,它们可以销毁 内部结构。一些链接可能会丢失,甚至进入 圆圈,使数据结构不可用。 (第 6.2.1 节)
我可以理解不同步的并发访问会损坏我的数据。如果两个线程都更新相同的值,一个可以覆盖另一个。
但它为什么以及如何破坏内部内存结构?
【问题讨论】:
-
内部内存是指
thing-HashMap实现的一些Colleciton of Entry内部结构,用于保存HashMap的数据。 -
如果您了解非同步并发访问可能会破坏“您的数据”,那么意识到它可能会破坏
HashMap以及“您的数据”和“内部数据”的结构应该是一小步。HashMap的内存结构”是一回事:Java 堆上的一堆对象。 -
@Holger 电脑和我的午餐盒是一样的,因为它们是塑料的。数据是用户提供的值,内部结构是底层数据结构中的指针。从 5000 到 -3838 的薪水数额如何破坏指针并不是很明显。因此问题。
-
@Kshitiz Sharma:你认为计算机为什么要区分“用户提供的值”和“底层数据结构中的指针”? CPU 不知道“用户”是什么,也不知道是谁提供了它处理的字节。如果你真的想学习多线程编程,我推荐阅读 Brian Goetz 等人的“Java Concurrency in Practice”。
-
@Holger
The computer没有。JVM确实而且应该。无法从 Java 访问内存引用。当甚至无法访问这些内容时,如何破坏这些内容?Java不应该好好管理它们吗?不是很明显。因此问题。
标签: java multithreading concurrency java-8