1.饿汉式单例模式
class Singleton {
// 在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
// 优点:线程安全,调用速度快
// 缺点:类加载较慢,可能会造成资源浪费
}
2.懒汉式单例模式
class Singleton {
private static Singleton instance;
private Singleton() {}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
// 优点:线程安全,资源利用率高
// 缺点:调用速度慢,每次都要进行线程同步
}
3.双重校验锁单例模式
class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// 优点:线程安全,调用速度快,资源利用率高
// 缺点:实现较复杂
}
4.静态内部类单例模式
class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
// 优点:线程安全,调用速度快,实现较简单
// 缺点:无
}
5.枚举单例模式
enum Singleton {
INSTANCE;
// 优点:线程安全,调用速度快,实现较简单,可防止反序列化重新创建新的对象
// 缺点:无
}