懒汉式单例模式 (线程不安全)
懒汉式单例模式在第一次使用时才创建实例,以延迟加载的方式实现单例。
public class Singleton {
// 懒汉式
private static Singleton singleton ;
private Singleton(){}
public static Singleton get(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
饿汉式单例模式 (线程安全)
饿汉式单例模式在类加载时即创建实例,以空间换时间的方式实现单例。
public class Singleton {
// 类加载时即创建唯一实例
private static Singleton instance = new Singleton();
// 私有构造方法,防止外部实例化
private Singleton() {}
// 公共静态方法,返回唯一实例
public static Singleton getInstance() {
return instance;
}
}
懒汉式单例模式 (线程安全,同步方法)
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
懒汉式单例模式 (线程安全,DCL方法)
public class Singleton {
// 注意:必须使用 volatile
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
// 第一次检查,避免不必要的同步
if (instance == null) {
synchronized (Singleton.class) {
// 第二次检查,避免多个线程同时通过第一次检查
if (instance == null) {
instance = new Singleton();
} } }
return instance;
}
}