gpt4 book ai didi

java - 线程安全的 HashMap ?

转载 作者:IT老高 更新时间:2023-10-28 20:45:25 24 4
gpt4 key购买 nike

我正在编写一个应用程序,它将向用户返回一个 HashMap。用户将获得此 MAP 的引用。在后端,我将运行一些线程来更新 map 。

到目前为止我做了什么?


我已使所有后端线程共享一个公共(public) channel 来更新 MAP。所以在后端我确信并发写操作不会成为问题。


我遇到的问题


  1. 如果用户尝试更新 MAP 并且同时在后端更新 MAP --> 并发写入操作问题。
  2. 如果使用尝试从 MAP 读取某些内容,同时 MAP 正在后端更新 --> 并发 READ 和 WRITE 操作问题。

到目前为止,我还没有遇到任何此类问题,但我担心我将来可能会遇到。请给出建议。

我正在使用 ConcurrentHashMap<String, String>.

最佳答案

使用 ConcurrentHashMap 你走在正确的轨道上.对于每个点:

  1. 查看方法putIfAbsentreplace两者都是线程安全的,并且将检查 hashmap 的当前状态并将其更新为一个原子操作。
  2. get方法内部不同步,但会返回可用的指定键的最新值(检查 ConcurrentHashMap class Javadoc for discussion )。

ConcurrentHashMap 优于 Collections.synchronizedMap 之类的东西是像 putIfAbsent 这样的组合方法,它以内部同步的方式提供传统的 Map getput 逻辑。使用这些方法,不要尝试通过 ConcurrentHashMap 提供您自己的自定义同步,因为它不起作用。 java.util.concurrent 集合是内部同步的,其他线程不会响应同步对象的尝试(例如 synchronize(myConcurrentHashMap){} 不会阻塞其他线程) .

关于java - 线程安全的 HashMap ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3222512/

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