1.双重检查锁定:加同步锁前后两次判断实例是否已存在
public class Singleton {
private Singleton(){}
private volatile static Singleton instance=null;
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null)
instance=new Singleton();
}
}
return instance;
}
}
2.饿汉模式
public class Singleton {
private Singleton(){}
private static Singleton instance=new Singleton();
public static Singleton getInstance(){
return instance;
}
}
3.根据内部类在外部类被加载时并不会被同时加载,实现按需创建实例
public class Singleton {
private Singleton(){}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
static class SingletonHolder{
private SingletonHolder(){}
private static final Singleton instance=new Singleton();
}
}