Java 中单例类的嵌套初始化

2025年6月19日 | 阅读 4 分钟

嵌套初始化是 Java 中用于实现单例类的一种技术,单例类是指在任何给定时间只允许存在一个实例的类。嵌套初始化技术可以确保即使多个线程尝试创建单例类实例,也只创建一个实例。

嵌套初始化技术是在单例类内部创建一个嵌套类。在嵌套类内部,有一个静态变量,它作为单例类实例的容器。当嵌套类首次创建时,它将静态变量初始化为一个新的单例类实例。这确保了只生成一个单例类实例。

要在 Java 中实现嵌套初始化的单例类,必须遵循以下步骤:

  1. 将类的构造函数设为私有。通过使用嵌套初始化,其他类将被阻止直接创建单例类的实例。
  2. 在单例类内部创建一个嵌套类。该嵌套类将负责保存单例实例。
  3. 在嵌套类的静态初始化块中初始化单例实例。Java 中的嵌套初始化技术可确保在嵌套类加载期间仅创建一次单例类的实例。这可以阻止创建多个实例。
  4. 构建一个公共的静态方法,该方法返回单例实例。其他类将使用该方法来访问单例实例。

使用嵌套初始化演示单例类

文件名: Singleton.java

输出

Hello World!

嵌套初始化的优点

  • 延迟加载
  • 线程安全

延迟加载

延迟加载是一种仅在需要时才创建对象的机制。它可以提高性能,因为程序在启动时不需要执行太多工作。当第一次在单例类中使用 getInstance() 方法时,才会构造该对象。

线程安全

线程安全是多线程程序中的一个关键问题。多个线程可以执行线程安全的程序,而不会导致数据损坏或其他问题。嵌套初始化模式是线程安全的,因为无论有多少线程试图访问它,单例类对象都只创建和初始化一次。

单例类的非线程安全实现

文件名: MySingleton.java

输出

Hello, I am a Singleton object!
Updated Singleton message

单例类的线程安全实现

文件名: NestedInitializationDemo.java

输出

Singleton instance created
Thread 1: It is a singleton value
Thread 2: It is a singleton value

下一主题Java 中的对象