我开始习惯关键字static
和volatile
Java。关于我正在构建的单例类,为什么我会看到以下设计?
public class Singleton{
private static volatile Singleton _instance;
public static Singleton getInstance(){
if(_instance == null){
synchronized(Singleton.class){
if(_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
而不是这个?
public class Singleton{
private static volatile Singleton _instance = new Singleton();
public static Singleton getInstance(){
return _instance;
}
}
第一个设计比第二个设计有什么优势吗?我能看到的唯一优点是第二种设计同步了整个方法,这可能需要阻塞整个方法。但我对此的反面想法是,该方法只有一行,根本不会明显阻塞,对吧?