您好,下面是 Effective Java 2nd Edition 的片段。在这里,作者声称以下代码比不使用结果变量的代码快 25%。根据这本书“这个变量的作用是确保该字段在已经初始化的常见情况下只读取一次。” . 如果我们不使用局部变量结果,我无法理解为什么在初始化值后这段代码会很快。在任何一种情况下,无论您是否使用局部变量结果,初始化后您都将只有一次 volatile 读取。
// Double-check idiom for lazy initialization of instance fields
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;
}