1.懒汉式
public class Singleton{
private static Singleton instance;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
2.双重检验锁
public class Singleton{
private static volatile Singleton instance; //声明成 volatile
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
synchornized(Singleton.class);
if(instance == null){
instance = new Singleton();
}
}
return instance;
}
}
3.饿汉式
public class Singleton{
//类加载时就初始化
private static final Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
4.静态内部类
public class Singleton{
private static class SingletonHolder(){
private static final Singleton instance = new Singleton();
}
private Singleton(){}
public static final Singleton getInstance(){
return SingletonHolder.instance;
}
}
5.枚举enum
public class Singleton{
private Singleton(){}
/**
*枚举类型是线程安全的,并且只会装载一次
*/
public enum SingletonEnum{
INSTANCE;
private final Singleton instance;
SingletonEnum(){
instance = new Singleton();
}
private Singleton getInstance(){
return instance;
}
}
public static Singleton getInstance(){
return SingletonEnum.INSTANCE.getInstance();
}
}