单例模式避免了资源的多次读写导致的同步、性能问题。
饿汉
先生成,用的时候直接引用
//A
public class SingletonInstance {
private static final SingletonInstance instance= new SingletonInstance();
public SingletonInstance getInstance(){
return instance;
}
}
//B
public class SingletonInstance {
private static final SingletonInstance instance;
static {
instance = new SingletonInstance();
}
public SingletonInstance getInstance() {
return instance;
}
}
//C
public class SingletonInstance {
private static class SingletonHolder {
private static final SingletonInstance instance = new SingletonInstance();
}
public SingletonInstance getInstance() {
return SingletonHolder.instance;
}
}
懒汉 - 双重校验锁
用的时候再生成
public class SingletonInstance {
private static volatile SingletonInstance instance;
public SingletonInstance getInstance() {
if (instance == null) {
synchronized (SingletonInstance.class) {
if (instance == null) {
instance = new SingletonInstance();
}
}
}
return instance;
}
}
枚举
枚举类的成员默认是Static Final
的
public enum SingletonInstance {
getInstance()
}
评论 (0)