### Java如何实现单例模式

#### 饿汉式单例

```java

public class EagerSingleton {

private static final EagerSingleton instance = new EagerSingleton();

private EagerSingleton() {}

public static EagerSingleton getInstance() {

return instance;

}

}

```

#### 懒汉式单例(线程安全)

```java

public class LazySingleton {

private static volatile LazySingleton instance;

private LazySingleton() {}

public static LazySingleton getInstance() {

if (instance == null) {

synchronized (LazySingleton.class) {

if (instance == null) {

instance = new LazySingleton();

}

}

}

return instance;

}

}

```

#### 静态内部类实现

```java

public class InnerClassSingleton {

private InnerClassSingleton() {}

private static class SingletonHolder {

private static final InnerClassSingleton instance = new InnerClassSingleton();

}

public static InnerClassSingleton getInstance() {

return SingletonHolder.instance;

}

}

```

#### 枚举实现(推荐方式)

```java

public enum EnumSingleton {

INSTANCE;

public void doSomething() {

// 业务方法

}

}

```

#### 实现要点

1. 私有构造函数:防止外部直接实例化

2. 静态实例变量:保证全局唯一性

3. 静态获取方法:提供全局访问点

4. 线程安全:确保多线程环境下正常工作

5. 防止序列化破坏:通过readResolve方法防止反序列化创建新实例

6. 防止反射攻击:在构造函数中添加检查逻辑

#### 选择建议

- 需要延迟加载:使用静态内部类或双重检查锁

- 简单场景:枚举实现(天然防止反射和序列化破坏)

- 性能要求高:饿汉式(无锁,类加载时初始化)

每种实现方式都有其适用场景,应根据具体需求选择最合适的实现方案。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐