Oracleの ReadWriteLock javadocとその実装volatile
では、ロックの機能と使用方法について説明していますが、キーワードを使用するかどうかについては何も述べていません。
これはdo-all-mutable-variables-need-to-be-volatile-when-using-locksと同じ質問ではありません。なぜなら、ロックがアクセスと可視性を適切に同期させることを嬉しく思いますがvolatile
、たとえば、コンパイラの最適化やその他の理由で、変数はまだ良い考えですか?
私のキャッシュされたデータは、めったに変更されず、オブジェクトのさまざまな属性を使用してリスト内のオブジェクトをマッピングするList
いくつかのデータで構成されています。Maps
private void reload() {
Set<Registration> newBeans = dao.listRegistered();
beans = Collections.unmodifiableSet(newBeans);
codeToBeanMap.clear();
userToBeanMap.clear();
nameToBeanMap.clear();
idToBeanMap.clear();
for (Registration bean : newBeans) {
codeToBeanMap.put(bean.getCode(), bean);
userToBeanMap.put(bean.getUser(), bean);
nameToBeanMap.put(bean.getName(), bean);
idToBeanMap.put(bean.getId(), bean);
}
}
最良の宣言は何でしょうか? 私はこれを持っています:
private Set<Registration> ecns;
private final Map<String, Registration> codeToBeanMap =
new HashMap<String, Registration>();
private final Map<String, Registration> userToBeanMap =
new HashMap<String, Registration>();
private final Map<String, Registration> nameToBeanMap =
new HashMap<String, Registration>();
private final Map<String, Registration> idToBeanMap =
new HashMap<String, Registration>();