生成单例的第一种方式。该方法没有并发问题
public class Singleton {
//在类的内部生成唯一一个实例。
private static Singleton instance = new Singleton();
private Singleton(){} //构造方法为private,无法从外部实例化该类
public static Singleton getInstance() { //返回唯一实例
return instance;
}
}
生成单例的第二种方式。该方式有并发问题。如果两个线程共同调用getInstance方法,第一个
线程if判断成功,开始创建对象但还没有赋值给instance属性时,第二个线程也开始if判断,判断成
功,那么第二个线程也会进入if语句,生成一个实例。那这样就不是单例了。
public class Singleton {
//在类的内部生成唯一一个实例。
private static Singleton instance;
private Singleton(){} //构造方法为private,无法从外部实例化该类
public static Singleton getInstance() { //返回唯一实例
if (null == instance) {
instance = new Singleton();
}
return instance;
}
}