【发布时间】:2012-08-24 12:11:13
【问题描述】:
Java 大师,
目前我们有一个HashMap<String,SomeApplicationObject>,它被经常读取并偶尔修改,我们遇到了在修改/重新加载期间,读取操作返回null的问题这是不可接受的。
要解决这个问题,我有以下选择:
这看起来像是第一选择,但我们正在谈论的操作是reload() - 表示clear(),然后是replaceAll()。因此,如果在clear() 和replaceAll() 之前读取Map,它返回null,这是不可取的。即使我synchronize 这也不能解决问题。
我将在reload() 操作之前创建获取Write Lock。这似乎更合适,但我觉得必须有一些可用的东西,我不需要重新发明轮子。
最好的出路是什么?
编辑是否已经有任何具有此类功能的收藏?
【问题讨论】:
-
您的地图实际上是不可变的,这使它们成为通过
volatile发布的完美目标。 -
实际上是不可变的对不起,我不太明白
immutable...你能提供一些提示吗???
标签: java locking concurrenthashmap reentrantreadwritelock