我有一个在安装过程中从数据库加载的HashMap。对数据库的更改会触发地图上的更新。我需要清除整个地图并用新值重新加载它。我需要阻止任何其他线程访问map的get方法,直到重新加载整个地图。
我不能使用ConcurrentHashMap,因为文档说:
对于诸如putAll和clear之类的聚合操作,并发检索可能反映只插入或删除一些条目。
我尝试使用synchronized块和ReadWriteLock来重新加载地图,但两者仍然允许其他线程从中读取。我无法锁定每次阅读,因为这会妨碍我的应用程序的性能。
通过getter提供对地图的所有读取权限。我考虑过使用信号量,但我不确定它是最好的解决方案。是否有其他解决方案可以在没有重大实施变更的情况下实现最佳性能?
this.getMap().clear();
this.getMap().putAll(data);