单例模式
懒汉式——线程不安全
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getUniqueInstance() {
if(uniqueInstance == null) {
uniqueInstance = new Singleton();
return uniqueInstance;
}
}
}
饿汉式——线程安全
public class Singleton {
private static Singleton uniqueInstance = new Singleton();;
private Singleton() {
}
public static Singleton getUniqueInstance() {
return uniqueInstance;
}
}
懒汉式——线程安全
public class Singleton {
private static Singleton uniqueInstance;
private Singleton() {
}
public static synchronized Singleton getUniqueInstance() {
if(uniqueInstance == null) {
uniqueInstance = new Singleton();
return uniqueInstance;
}
}
}
双重校验锁——线程安全
public class Singleton {
private volatile static Singleton uniqueInstance;
private Singleton() {
}
public static Singleton getUniqueInstance() {
if(uniqueInstance == null) {
synchronized(Singleton.class) {
if(uniqueInstance == null) {
uniqueInstance = new Singleton();
return uniqueInstance;
}
}
}
}
}
静态内部类实现——线程安全
public class Singleton {
private Singleton() {
}
private static SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getUniqueInstance() {
return SingletonHolder.INSTANCE;
}
}
枚举实现——防止反射攻击
public enum Singleton {
INSTANCE;
private String objName;
public void setObjName(String objName) {
this.objName = objName;
}
public Object getObj() {
return objName;
}
}