use*_*878 41 java multithreading hashmap java.util.concurrent
我正在编写一个将HashMap返回给用户的应用程序.用户将获得对此MAP的引用.在后端,我将运行一些将更新Map的线程.
到目前为止我做了什么?
我已经制作了所有后端线程,因此共享一个公共频道来更新MAP.所以在后端我确信并发写操作不会成为问题.
我遇到的问题
直到现在我还没有遇到任何这样的问题,但我担心将来我可能会面对.请给出sugesstions.
我在用 ConcurrentHashMap<String, String>.
kro*_*ock 53
你正在使用正确的轨道ConcurrentHashMap
.对于每一点:
putIfAbsent
,replace
两者都是线程安全的,并结合检查hashmap的当前状态并将其更新为一个原子操作.ConcurrentHashMap
类似于Collections.synchronizedMap
组合方法的好处是以内部同步的方式putIfAbsent
提供传统的Map get
和put
逻辑.使用这些方法,不要尝试提供自己的自定义同步,ConcurrentHashMap
因为它将无法正常工作.该java.util.concurrent
集合被内部同步和其他线程不会在同步对象(例如,以努力作出响应synchronize(myConcurrentHashMap){}
也不会妨碍其他线程).