这个问题在某种程度上是这个问题的延续和扩展,因为我认为这是一个完美的问题:分配给局部变量在这里有什么帮助?
这个问题基于Item 71
of Effective Java
,建议通过在volatile
字段访问中引入局部变量来提高性能:
private volatile FieldType field;
FieldType getField() {
FieldType result = field;
if (result == null) { // First check (no locking)
synchronized(this) {
result = field;
if (result == null) // Second check (with locking)
field = result = computeFieldValue();
}
}
return result;
}
所以,我的问题更常见:
我们是否应该始终volatile
通过将字段的值分配给局部变量来访问字段? (以存档最佳性能)。
即一些成语:
我们有一些
volatile
领域,就叫它吧volatileField
;如果我们想在多线程方法中读取它的值,我们应该:
- 创建具有相同类型的局部变量:
localVolatileVariable
- 分配 volatile 字段的值:
localVolatileVariable = volatileField
从此本地副本中读取值,例如:
if (localVolatileVariable != null) { ... }
- 创建具有相同类型的局部变量: