浏览Java API源代码时,我经常看到方法参数已重新分配给局部变量。为什么要这样做?
void foo(Object bar) {
Object baz = bar;
//...
}
这在java.util.HashMap中
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
这是线程安全性/更好性能的规则。values
在HashMap
易失。如果将变量分配给局部变量,它将变为局部堆栈变量,该变量自动是线程安全的。而且,修改本地堆栈变量不会强制“先发生”,因此在使用它时不会产生同步损失(与之不同的是,每次读/写操作都将导致易失性,这会花费您获取/释放锁的时间)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句