Java中的单例模式

在软件工程中,单例模式是一种软件设计模式,它将类的实例化限制为一个“单个”实例。当恰好需要一个对象来协调整个系统中的动作时,这很有用。

通常,这是通过以下方式完成的:

  •   声明该类的所有构造函数为私有
  •   和提供一个静态方法,该方法返回对该实例的引用

 

饿汉式:该实例通常存储为私有静态变量。在初始化变量时,即在首次调用静态方法之前的某个时刻,创建了实例。以下是用Java编写的示例实现。

复制代码
public final class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }
}
复制代码

懒汉式:单例实现可以使用延迟初始化,在首次调用静态方法时创建实例。如果可能同时从多个线程调用静态方法,则可能需要采取措施来防止可能导致创建该类的多个实例的竞争条件。以下是使用Java编写的使用带双重检查锁定的延迟初始化的线程安全示例实现。

复制代码
public final class Singleton {

    private static volatile Singleton instance = null;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized(Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }

        return instance;
    }
}
复制代码

 总结:

  •   单例模式通过私有构造函数并提供一个静态方法返回该实例
  •   单例模式分为懒汉式和饿汉式
  •   饿汉式在Class加载的时候就创建了该实例,不会出现线程安全的问题
  •   懒汉式是在程序调用的时候创建实例,会出现线程安全的问题

参考网站:https://en.wikipedia.org/wiki/Singleton_pattern

posted @   我要去巴萨  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示