Уместно ли использовать AtomicReference.compareAndSet для установки ссылки на результаты вызова базы данных?
Я реализую простой кэш с кешем, хранящимся как AtomicReference.
private AtomicReference cacheData;
Объект кэша должен заполняться (лениво) из таблицы базы данных.
Я предоставляю метод для возврата данных кэша вызывающей стороне, но если данные нулевые (т.е. не загружены), тогда код должен загрузить данные из базы данных. Чтобы избежать синхронизации, я подумал об использовании метода compareAndSet ():
public Object getCacheData() {
cacheData.compareAndSet(null, getDataFromDatabase()); // atomic reload only if data not set!
return Collections.unmodifiableMap(cacheData.get());
}
Это нормально, чтобы использовать CompareAndSet таким образом, т.е. включить вызов базы данных как часть атомарного действия? Это лучше / хуже, чем просто синхронизировать метод?
Большое спасибо за любые советы ..