gpt4 book ai didi

Java:从 HashMap 中读取可以改变它的状态吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:59 24 4
gpt4 key购买 nike

非同步的并发更新HashMap显然会导致活锁或其他数据损坏;为避免这种情况,应使用并发版本或实现同步机制。

可以并发调用HashMap.get()改变 HashMap 的状态,比如重新散列?

更新:

除了挑剔数据结构行为的理论乐趣之外,一些评论者还想知道这个问题的实际方面。

如果 get() 不改变 HashMap 的状态(并且不会因为其他原因导致活锁),则单个线程可以创建 HashMap提前,然后许多线程可以同时读取它。如果并发读取不安全,则无论类型如何,我们都需要为每个多线程访问使用 ConcurrentHashMap

最佳答案

来自java docs :

If multiple threads access a hash map concurrently, and at least one of the threads modifies the map structurally, it must be synchronized externally. (A structural modification is any operation that adds or deletes one or more mappings; merely changing the value associated with a key that an instance already contains is not a structural modification.)

这意味着并发 get() 没问题,不会导致状态改变。

此外,您可以随时查看 source有关其构建方式的更多信息。

关于Java:从 HashMap 中读取可以改变它的状态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13374726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com