0

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>();
4

3 に答える 3