Java专家
目前,我们有一个HashMap<String,SomeApplicationObject>正被 频繁地读取和修改偶尔 ,我们有问题的修改过程中/重装, 读 操作返回null这是不能接受的。
HashMap<String,SomeApplicationObject>
null
为了解决这个问题,我有以下选择:
A.使用 ConcurrentHashMap
看起来像是首选,但是我们所讨论的操作是reload()-表示clear()紧随其后replaceAll()。因此,如果在Map读后读clear()pre,replaceAll()则返回null,这是不希望的。即使我synchronize不能解决问题。
reload()
clear()
replaceAll()
Map
synchronize
B.基于 ReentrantReadWriteLock创建另一个实现
我将Write Lock在reload()手术前创建获取的位置。这似乎更合适,但是我觉得必须已经有一些可用的东西了,我不需要重新发明轮子。
Write Lock
最好的出路是什么?
编辑 是否已有任何具有此类功能的收藏夹?
似乎您不确定Peter Lawrey的建议如何实施。它可能看起来像这样:
class YourClass { private volatile Map<String, SomeApplicationObject> map; //constructors etc. public void reload() { Map<String,SomeApplicationObject> newMap = getNewValues(); map = Collections.unmodifiableMap(newMap); } }
没有并发问题,因为:
getNewValues
map