单例模式
2020-07-13 本文已影响0人
淡季的风
内部静态类
public class Singleton {
private Singleton(){}
public static Singleton getInstance(){
return SingletonInstance.INSTANCE;
}
private static class SingletonInstance{
private static Singleton INSTANCE = new Singleton();
}
}
双锁验证
public class Singleton2 {
private volatile static Singleton2 INSTANCE;
private Singleton2(){}
public static Singleton2 getINSTANCE(){
synchronized (Singleton2.class){
if(INSTANCE == null){
synchronized (Singleton2.class){
if(INSTANCE == null){
INSTANCE = new Singleton2();
}
}
}
}
return INSTANCE;
}
}
- 防止指令重排序
枚举
public class Singleton3 {
private Singleton3(){}
private enum SingletonObject{
INSTANCE;
private final Singleton3 instance;
SingletonObject(){
instance = new Singleton3();
}
public Singleton3 getInstance(){
return instance;
}
}
public static Singleton3 getInstance(){
return SingletonObject.INSTANCE.getInstance();
}
}