我遇到了一个单例类{lazy initialization}。代码如下懒惰初始化具有volatile变量的Singleton类
// Singleton reference for this class
private static volatile FileProperties INSTANCE = null;
public static FileProperties getInstance() {
if (INSTANCE == null) {
synchronized (FileProperties.class) {
if (INSTANCE == null) {
INSTANCE = new FileProperties();
}
}
}
return INSTANCE;
}
我的问题是什么是我们正在通过使实例作为挥发性 既然我们已经照顾线程安全的通过同步获取利益。 在这种情况下是否有挥发性的好处?
请参阅http://jeremymanson.blogspot.co.uk/2008/05/double-checked-locking.html – 2013-05-14 11:51:59
这种双重检查的锁定有一个潜在的错误,因为INSTANCE变量可能被赋予一个非空值*之前* FileProperties的构造函数已完全执行。当然,如果构造函数是空的,这并不重要。 – 2013-05-14 11:55:14
@JakobJenkov也许值得澄清:** IF ** INSTANCE不易变。 – assylias 2013-05-14 11:56:34