1)起到了lazy loading的效果,但是只能在单线程下使用
2)如果在多线程下,一个线程进入了 if(singleton == null)判断语句块,还没有来得及往下执行,另一个线程也通过了这个判断语句,这时便会产生多个实例,所以在多线程环境下不可使用这种方式
3)在实际开发种,不要使用这种方式
public class SingletonTest02 {
public static void main(String[] args) {
Singleton02 instance = Singleton02.getInstance();
Singleton02 instance01 = Singleton02.getInstance();
System.out.println(instance == instance01);
System.out.println("instance,hashCode = " + instance.hashCode());
System.out.println("instance01,hashCode = " + instance01.hashCode());
}
}
class Singleton02{
private static Singleton02 singleton;
private Singleton02(){}
public static Singleton02 getInstance(){
if(singleton == null){
singleton = new Singleton02();
}
return singleton;
}
}
// 运行结果
true
instance,hashCode = 1846274136
instance01,hashCode = 1846274136