2

我发现自己重复了以下代码

  1. 存储数据结构的只写副本和只读不可变 ConcurrentHashMap
  2. 读者只从只读不可变 HashMap 中读取,没有锁
  3. Writer 正在写入只写带有锁的数据结构(另一个 ConcurrentHashMap)。
  4. 每隔几分钟(取决于应用程序的需要),我会切换只读数据结构,该数据结构有点旧,只写数据结构。出于这个原因,我在这里不使用锁,我在只读数据结构上使用了一个volatile only 标记。

java / 官方库中是否有一个已经发布的带有示例代码的众所周知的模式,这样我就不必自己创建这个模式了?

4

1 回答 1

3

也许我不完全理解你的要求,但你为什么不读写一个实例ConcurrentHashMap?a 的全部意义在于ConcurrentMap对线程之间的映射的读取和写入以线程安全的方式发生。您能解释一下为什么在您的情况下不会发生这种情况吗?

只读不可变 ConcurrentHashMap <——这绝对没有意义。任何Map安全发布的实例(例如普通的 old HashMap)都可以被多个线程安全地读取。这里唯一的危险是保证Map只读取而不写入。可以通过使用任Collections.unmodifiableMap()一或 Guava 的ImmutableMap. 还值得一提的是,最好确保映射条目本身是不可变的。

于 2013-08-29T07:21:49.233 回答