一、单例模式是什么
在 Java 中,单例模式是一种设计模式,用于确保某个类在应用程序中只能创建一个实例,并提供一个全局访问点来访问该实例。单例模式通常用于管理共享资源、配置对象、数据库连接池等场景,以确保系统中某些对象的唯一性和一致性。
二、有哪些单例模式
在 Java 中,实现单例模式的方法有以下几种:
2.1 饿汉式
饿汉式(Eager Initialization):在类加载时就创建实例,保证了线程安全,但可能会导致资源浪费,因为无论是否使用都会创建实例。
public class Singleton {
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return INSTANCE;
}
}
2.2 懒汉式
懒汉式(Lazy Initialization):在第一次使用时才创建实例,节省了资源,但需要考虑线程安全问题。常见的方法有双重检查锁和静态内部类。
- 双重检查锁(Double-Checked Locking)
public class Singleton {
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;
}
}
- 静态内部类(Static Nested Class)
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
2.3 枚举单例
枚举单例:利用枚举类型的特性保证实例的唯一性。枚举类的实例在 JVM 中是唯一的,且线程安全。
public enum Singleton {
INSTANCE;
// 可以添加其他方法和属性
}