我正在编写一个将HashMap返回给用户的应用程序。用户将获得对此MAP的引用。 在后端,我将运行一些线程来更新Map。
到目前为止我做了什么?
我已经制作了所有后端线程,因此共享一个公共频道来更新MAP。所以在后端我确信并发写操作不会成为问题。
我遇到的问题
直到现在我还没有遇到任何这样的问题,但我担心将来可能面临这样的问题。请给出sugesstions。
我正在使用ConcurrentHashMap<String, String>.
答案 0 :(得分:53)
您使用ConcurrentHashMap
走在正确的轨道上。对于每一点:
putIfAbsent
和replace
两者都是线程安全的,并结合检查hashmap的当前状态并将其更新为一个原子操作。 ConcurrentHashMap
优于Collections.synchronizedMap
之类的好处是像putIfAbsent
这样的组合方法,它们以内部同步的方式提供传统的地图get
和put
逻辑。使用这些方法并且不尝试通过ConcurrentHashMap
提供您自己的自定义同步,因为它不起作用。 java.util.concurrent
集合在内部同步,其他线程不会响应同步对象的尝试(例如synchronize(myConcurrentHashMap){}
不会阻止其他线程。)
答案 1 :(得分:8)
答案 2 :(得分:0)
ConcurrentHashMap的设计和实现是为了避免您描述的场景出现任何问题。你无需担心。
支持完整的哈希表 检索和并发 可调节的预期并发性 updates.updates。