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