我有一个关于双重检查锁定的问题。考虑这个例子:
public class Singleton {
private static volatile Singleton instance = null;
public static Singleton getInstance() {
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance ;
}
}
据我了解,上面的代码是制作单例类的正确方法。
但是,NetBeans 希望我删除外部 if 语句,所以它看起来像这样:
public class Singleton {
private static volatile Singleton instance = null;
public static Singleton getInstance() {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
return instance ;
}
}
这两个片段之间的唯一区别是,在第二个示例中,代码将始终进入同步块,而在第一个示例中则不会。为什么我要听 NetBeans 并删除外部 if 语句?最好避免锁定。