单例模式与volatile和synchronized关键字
看到一些讨论volatile用法的文章里面把单例模式的代码写成了如下的样子,
class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
为什么这样写那?
把getInstance() 写成同步方法不就完事了吗???
public static synchronized Singleton getInstance() { ... }
兄弟们有什么想法,还请指教,谢谢。