Java 大师,
目前我们有一个 HashMap<String,SomeApplicationObject>
经常读取并偶尔修改,我们遇到了在修改/重新加载期间,读取操作返回 null
的问题这是 Not Acceptable 。
要解决这个问题,我有以下选项:
A.使用 ConcurrentHashMap
这看起来像是首选,但我们正在谈论的操作是reload()
- 表示 clear()
其次是 replaceAll()
.所以如果Map
正在阅读帖子 clear()
和前 replaceAll()
它返回 null 这是不可取的。即使我synchronize
这并不能解决问题。
B.基于 ReentrantReadWriteLock 创建另一个实现
我将在哪里创建 acquire Write Lock
之前 reload()
手术。这似乎更合适,但我觉得必须有一些已经可用的东西,我不需要重新发明轮子。
最好的出路是什么?
EDIT 是否有任何 Collection 已经可以使用此功能?
最佳答案
由于您正在重新加载 map ,我会在重新加载时替换它。
您可以使用 volatile 映射来实现这一点,当它更新时,您可以将其完全替换。
关于java - ConcurrentHashMap 与基于 ReentrantReadWriteLock 的用于重新加载的自定义映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12109185/