0

当我在测验中问到以下问题时,我对自己的理解有些困惑:

1)ConcurrentHashMap:据我了解,没有锁可以从此映射中获取值(对应于键)。问题是:如果这是真的,假设 t1 正在写入(通过锁定段/桶)并且 t2 尝试读取相同的内容,t2 将不会获得正确的值,因此与 t2 的值不一致

2)HashMap:据我了解,在将元素添加到hashbucket之前,将hashvalue H计算为键(key.hashcode())的hashcode%16(给出从0到15的值),然后添加到bucket中其哈希值为 H 注意:有 16 个桶(默认实现),代表ArrayList一个LinkedList


|0 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 | 11 |12 |13 |14 |15 |


ArrayList at 2000(内存地址)

您可以说这是ConcurrentHashMap 中的 Segmentation 的重复,关于Java 控制器中并发 hashmap、 HashMap 或 ConcurrentHashMap 的内部工作?等。但我需要了解疑虑。几个链接/博客可以很好地解释对我有用。谢谢

4

1 回答 1

0

使用此链接学习ConcurrentHashMapHashMap

第一部分。你说的是对的。如果在 ConcurrentHashMap 中找到键,get() 不会对该段进行锁定。如果你有另一个线程正在修改 Map 的结构(例如 put())并且它还没有完成,那么你肯定会得到陈旧的值。但它不会抛出 ConcurrentModificationException。如果修改操作在检索操作之前完成,则将反映更新的值。

我希望这有帮助。

于 2013-06-08T06:40:34.707 回答