Я реализую простой кеш с кешем, хранящимся как 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 таким образом, т.е. включить вызов базы данных как часть атомарного действия? Это лучше/хуже, чем просто синхронизация метода?
Большое спасибо за любой совет..