double-checked locking
成语
Java
null
如果是这样,则获取具有该字段的类的锁:
// Double-check idiom for lazy initialization of instance fields
// See Pascal Thivent's original answer <https://stackoverflow.com/a/3580658/1391325>
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;
}
field
null object
“延迟替换为“非空对象”的值),可以在
this
synchronized(field)
?
实例
我有一个很大的
HugeObject
Reference<HugeObject>
Reference<HugeObject> field = new SoftReference<>(null)
这
因此,使用不影响
领域
领域
。那么是否可以简单地在
此初始“空对象”
或
已经实例化的“非空对象”,或者这会导致微妙的、不想要的并发影响吗?见以下代码:
private volatile Reference<HugeObject> field = new SoftReference<>(null);
HugeObject getField() {
HugeObject result = field.get();
if (result == null) {
synchronized(field) {
result = field.get();
if (result == null) {
result = computeFieldValue();
field = new SoftReference<>(result);
}
}
}
return result;
}