gpt4 book ai didi

java - 不同的用户同时在java hashmap中选择相同的键——它是线程安全的吗?

转载 作者:行者123 更新时间:2023-11-30 03:57:01 25 4
gpt4 key购买 nike

我有一个在java中工作的函数,使得HashMap将键存储为String,将值存储为ArrayList。所以我的问题是,当不同的用户同时登录并且他们尝试访问网络应用程序并选择相同的 key 时,在这种情况下 HashMap 需要同步吗?

像..当User1登录时,hashmap中的vlaue将在幕后存储,例如 map .put(A,列表1)map.put(B, List2)

当User2登录时,hashmap中的vlaue将在幕后存储,例如 map .put(A,列表3)map.put(C, List4)

所以现在如果两个用户同时登录并且 key 相同但(列表值始终不同)则需要同步此 HashMap ??。

最佳答案

无论您是否使用相同的 key ,HashMap 对于任何写入来说都不是线程安全的:

Note that this implementation is not synchronized. 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.)

即使涉及不同的按键,同时进行两个操作也可能会触发内部 map 扩展,从而导致问题。 (或者即使有一个写入操作和一个读取操作,如果写入操作添加或删除了一个键,则可能会导致读取操作失败。)

选项:

编辑:如果事实上您没有有多个线程同时修改 map (因为每个用户只有一张 map ),那么大多数问题都会消失......尽管如果仍然可能有多个线程访问 map (只是不是同时),无论如何我都会想使用并发 map 来避免陈旧读取等问题。

关于java - 不同的用户同时在java hashmap中选择相同的键——它是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22904576/

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