【发布时间】:2022-01-24 16:20:06
【问题描述】:
我正在 Spring Web 服务中实现线程安全的 map。
地图是这样的。
- 在数千个客户端线程中同时读取地图。
- 有时必须完全更新地图的内容(大约每小时一次)。
我已选择 ConcurrentHashMap 用于线程安全映射,但没有功能可以简单地将其内容与较新的映射交换,例如 c++ 中的 std::map::swap()。
(我以为多线程环境需要对整个内容进行原子更新,也许我错了)
有没有swap的替代地图?
任何建议或回复将不胜感激。谢谢。
【问题讨论】:
-
在这种情况下,为什么不直接指向新地图呢?请记住让您的实例变量为 volatile,以便所有线程都在查看最新的地图。
-
@AminM 我没想到。也许在我的情况下是可能的,我会试试看。
-
AtomicReference 可能会更好,因为他们建议如下。
-
只需要一个 volatile 变量。 AtomicReference get/set 只是 volatile get/set。所以我什至不会打扰 AtomicReference。
标签: java multithreading concurrenthashmap