饿汉模式
- 在程序启动时创建对象
- 饿汉模式单例模式,static实现
public class Singleton {
private static Singleton singleton;
// 使用静态代码块初始化
static{
singleton = new Singleton();
}
public static Singleton newInstance() {
return singleton;
}
private Singleton() {
}
}
public class Singleton {
private Singleton() {
}
public static Singleton newInstance(){
return SingletonEnum.INSTANCE.getSingleton();
}
public enum SingletonEnum{
INSTANCE;
private Singleton singleton;
// 枚举类的构造方法只被调用一次
SingletonEnum(){
singleton = new Singleton();
}
public Singleton getSingleton() {
return singleton;
}
}
}
懒汉模式
- 在第一次调用时初始化
- 出于性能考虑,推荐使用volatile双重验证方式实现
- 注意:由于JVM的乱序优化,如果不使用volatile很可能导致错误
public class Singleton {
private volatile static Singleton singleton;
public static Singleton newInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
private Singleton() {
}
}