两种经典的线程安全的单例模式(均采用懒汉式),一种是同步加锁的模式;一种是采用私有静态类的方式。
一、只有当instance为null时,需要获取同步锁,创建一次实例。当实例被创建,则无需试图加锁。
public class Singleton {
private static Singleton instance=null;
private Singleton(){
}
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance=new Singleton();
}
}
}
return instance;
}
}
二、定义一个私有的内部类,唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,在第一次用这个嵌套类时,会创建一个实例。
而类型为SingletonHolder的类,只有在Singleton.getInstance()中调用,由于私有的属性,他人无法使用SingleHolder,不调用Singleton.getInstance()就不会创建实例。
public class Singleton {
private Singleton(){
}
private static class SingletonHolder{
private final static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}