HashMap和ConcurrentHashMap内部工作

时间:2013-04-07 10:51:17

标签: hashmap concurrenthashmap

当我的理解有些困惑时,以下事情在测验中向我询问:

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

2)HashMap:根据我的理解,在将元素添加到hashbucket之前,hashvalue H 计算为hashcode%16(给出0到15之间的值)密钥(key.hashcode())然后添加到哈希值为 H 的存储桶中 注意:有16个存储桶(默认实现),表示ArrayList LinkedList


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


2000的ArrayList(内存地址)

你可以说这与Segmentation in ConcurrentHashMapRegarding internal working of concurrent hashmapHashMap or ConcurrentHashMap at Java Controllers?等重复。但我需要理解疑惑。一些好的解释链接/博客对我有用。感谢

1 个答案:

答案 0 :(得分:0)

使用此链接学习ConcurrentHashMapHashMap

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

我希望这会有所帮助。