第一种:懒汉
public class Singleton {
/**
* 单例模式,懒汉方式
*/
private static Singleton instance = null;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instance;
}
}
第二种:恶汉
public class Singleton {
/**
* 单利模式,饿汉模式
*/
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
第三种:双重校验锁
public class Singleton {
/**
* 单例模式,双重锁
*/
private volatile static Singleton singleton;
private Singleton (){}
public static Singleton getSingleton() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
第四种:枚举
/**
* 单例模式,枚举
*/
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
第五种:静态内部类
public class Singleton {
/**
* 单例模式,静态内部类
*/
private static class SingletonHolder {
private final static Singleton INSTANCE = new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}