线程安全的方式来复制地图

Rob*_*ram 0 java guava

我正在使用JDK 7,SQLite,并在我的项目中使用了Guava.

我有一个少于100个条目的TreeMap,由一个"工作"线程每秒更新数百次.我现在正在编写一个组件(另一个线程 - "DB线程"),它将每隔5或10秒将映射写入我的数据库.

我知道我需要制作地图的深层副本,以便数据库线程将使用快照,而工作线程继续其工作.我正在查看Guava Maps类,它有许多制作副本的方法,但我不确定它们是否满足我在需要副本时在地图上同步的需要.有没有一种方法可以满足我的需求,或者我应该编写一个同步块来制作我自己的深层副本?

Dav*_*kys 7

这取决于你想要的:

如果你想要一个完全并发的地图(在添加时不能读取等等)你应该使用JSlain在我之前所说的内容.

如果您想要的只是地图的CURRENT快照,并且您不关心是否只要您使用的迭代器不会更改地图.

然后使用ConcurrentSkipListMap

这将为每次迭代提供一个新的独立迭代器,因此即使真实地图被更改,您也不会注意到它.

您将在下次更新中看到它(在您的情况下为5秒).