キャッシュが AtomicReference として格納された単純なキャッシュを実装しています。
private AtomicReference<Map<String, String>> cacheData;
キャッシュ オブジェクトは、データベース テーブルから (遅延して) 読み込まれる必要があります。
キャッシュ データを呼び出し元に返すメソッドを提供しますが、データが null (つまり、読み込まれていない) の場合、コードはデータベースからデータを読み込む必要があります。同期を避けるために、compareAndSet() メソッドを使用することを考えました。
public Object getCacheData() {
cacheData.compareAndSet(null, getDataFromDatabase()); // atomic reload only if data not set!
return Collections.unmodifiableMap(cacheData.get());
}
このようにcompareAndSetを使用しても問題ありませんか。アトミックアクションの一部としてデータベース呼び出しを含めるには? メソッドを同期するよりも良い/悪いですか?
アドバイスをありがとう..