public class Singleton2 {
private static Singleton2 instance2 = null;
public static synchronized Singleton2 getInstance() {
if(instance2 == null) {
return new Singleton2();
}
return instance2;
}
}public class Test { public static void main(String[] args) {
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
System.out.println("s3 = " + s3);
System.out.println("s4 = " + s4); }
}
输出结果:
s3 = com.singleton.Singleton2@9cab16
s4 = com.singleton.Singleton2@1a46e30对上面的输出结果不解,这是在单例模式代码中看到的!
private static Singleton2 instance2 = null;
public static synchronized Singleton2 getInstance() {
if(instance2 == null) {
return new Singleton2();
}
return instance2;
}
}public class Test { public static void main(String[] args) {
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
System.out.println("s3 = " + s3);
System.out.println("s4 = " + s4); }
}
输出结果:
s3 = com.singleton.Singleton2@9cab16
s4 = com.singleton.Singleton2@1a46e30对上面的输出结果不解,这是在单例模式代码中看到的!
return new Singleton2();
}
这里改成
if(instance2 == null) {
instance2 = new Singleton2();
}
return new Singleton2();
}
这个是有问题的。改成这样:
if(instance2 == null) {
instance2 = new Singleton2();
}
你的成员变量instance2 始终没有被赋值,所有instance2永远都是null,
第2次调用方法 必然会重新 new Singleton2(); 形成新对象
// 这样的话这个单例就没有意义了,加上:
private Singleton2() {
} public static synchronized Singleton2 getInstance() {
if(instance2 == null) {
// 问题二:这里的问题前面楼层已经指出了,这里就不再赘述了
return new Singleton2();
}
return instance2;
}
}public class Test { public static void main(String[] args) {
Singleton2 s3 = Singleton2.getInstance();
Singleton2 s4 = Singleton2.getInstance();
System.out.println("s3 = " + s3);
System.out.println("s4 = " + s4);
}
}// 为了避免同步锁带来的性能开销,建议改成这样:public class Singleton2 { private static Singleton2 instance2 = new Singleton2(); private Singleton2() {
} public static Singleton2 getInstance() {
return instance2;
}
}
有问题 你的逻辑有点问题 instance2一直都是NULL 始终没被初始化 走符合条件的流程也不给他初始化