如何原子替换单例图的所有值?

时间:2018-08-24 21:10:10

标签: java concurrency

我始终使用一个单例地图,这意味着我不能简单地重新分配整个地图。我控制地图,以便可以将其设置为ConcurrentHashMap。

我正在一个单独的线程中填充它(我正在使用Quartz创建计划的作业)。我需要从映射中删除所有值,并在其中放入一堆新值。不过,我担心的是,在CPU周期中,映射为空,可能会有单独的线程读取映射。我每N秒进行一次地图填充。

如果我不关心使操作原子化,我可以这样做:

Map<String, String> newMap = ...;
myMap.clear(); 
// What if a read happens here?
myMap.putAll(newMap);

我对同步不是很了解,但是我认为将其放在同步块中不会有所帮助,因为不是通过此代码进行读取。

ConcurrentHashMap提供了一些有用的原子操作,但看起来没有提供任何可帮助我解决此问题的方法。

0 个答案:

没有答案