要么你想用一个简单的enum
public enum MySingleton {
INSTANCE
}
或者你有充分的理由让它变得更复杂
public class MySingleton {
private MySingleton() { }
private static MySingleton instance = null;
public synchronized static MySingleton getInstance() {
if (instance == null)
instance = new MySingleton();
return instance;
}
}
无论哪种方式,使用 volatile 都无济于事。
恕我直言,没有一个好的单例模式可供您使用volatile
,因此如果需要,代码需要修复或简化。
AFAIK 使用 volatile 的唯一情况是双重检查锁定
public class MySingleton {
private MySingleton() { }
private static volatile MySingleton instance = null;
public static MySingleton getInstance() {
if (instance == null)
synchronzied(MySingleton.class) {
if (instance == null)
instance = new MySingleton();
}
return instance;
}
}
为了比较,enum
上面的示例做了很多示例。
http://javarevisited.blogspot.co.uk/2011/06/volatile-keyword-java-example-tutorial.html
http://www.ibm.com/developerworks/java/library/j-dcl/index.html