是否有一个不可变(通常是ConcurrentHashMap)数据结构的官方模式,它有能力每隔一段时间更换一次?

时间:2013-08-29 06:51:30

标签: java concurrency

我发现自己重复了

的代码
  1. 存储只写数据结构的副本,只读不可变的ConcurrentHashMap
  2. 读者只能阅读只读的不可变HashMap 无锁
  3. Writer正在编写只使用锁写入数据结构(另一个ConcurrentHashMap)。
  4. 每隔几分钟(取决于应用程序的需要)我使用只写数据结构切换只读数据结构。出于这个原因,我在这里没有使用锁,我在只读数据结构上使用 volatile 标记。
  5. 是否已经在java /官方库中使用示例代码发布了一个众所周知的模式,这样我就不必自己创建这个模式了?

1 个答案:

答案 0 :(得分:1)

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

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