如何制作`ConcurrentHashMap`的不可变副本?

时间:2018-04-09 07:35:37

标签: java java.util.concurrent

ConcurrentHashMap在Scala中也可用于以线程安全的方式处理状态。

我想为它做一个不可变的快照,用于本地处理。有一种简单的方法可以做到这一点吗?

澄清:在制作快照时让事情发生变化是可以的。我只需要及时使用一些镜头,然后使用(不可变使用)2-3秒,然后丢弃。

临时状态:感谢所有想法,这很快! :)我会检查它们,但看起来只是Scala地图而synchronized可能是最不复杂的路径,对我而言。

1 个答案:

答案 0 :(得分:0)

好吧,你可以使用Guava's ImmutableMap

ImmutableMap<K, V> immutableCopy = ImmutableMap.copyOf(yourConcurrentMap);

当然,如果在复制操作期间发生了写入,那么这些也可能最终出现在副本中。