我正在实现一个简单的缓存,缓存存储为 AtomicReference。
private AtomicReference<Map<String, String>> cacheData;
缓存对象应该(懒惰地)从数据库表中填充。
我提供了一种将缓存数据返回给调用者的方法,但是如果数据为空(即未加载),则代码需要从数据库中加载数据。为了避免同步,我想到了使用 compareAndSet() 方法:
public Object getCacheData() {
cacheData.compareAndSet(null, getDataFromDatabase()); // atomic reload only if data not set!
return Collections.unmodifiableMap(cacheData.get());
}
以这种方式使用 compareAndSet 是否可以,即。将数据库调用作为原子操作的一部分?它比仅仅同步方法更好/更差吗?
非常感谢您的任何建议..