一个问题:双重检查加锁为什么用了 volatile 就可以正确工作?
反过来问:不用 volatile 修饰 resource
属性有什么问题?
双重检查加锁的简单示例:
public class DoubleCheckedLocking {
private static Resource resource;
public static Resource getInstance() {
if (resource == null) { // LL01
synchronized (DoubleCheckedLocking.class) {
if (resource == null) {
resource = new Resource();
}
}
}
return resource;
}
}