【问题标题】:HashMap and ConcurrentHashMap interal workingHashMap 和 ConcurrentHashMap 内部工作
【发布时间】:2013-04-07 10:51:16
【问题描述】:

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

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

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


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


ArrayList at 2000(内存地址)

你可以说这是Segmentation in ConcurrentHashMapRegarding internal working of concurrent hashmapHashMap or ConcurrentHashMap at Java Controllers?等的重复。但我需要理解怀疑。几个链接/博客可以很好地解释对我有用。谢谢

【问题讨论】:

标签: hashmap concurrenthashmap


【解决方案1】:

使用此链接学习ConcurrentHashMapHashMap

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

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2012-05-08
    • 1970-01-01
    • 2013-02-13
    • 2010-11-25
    相关资源
    最近更新 更多