单例模式代码

以下是一个使用双检锁实现的线程安全单例模式示例代码:

复制代码
public class Singleton {
    // volatile确保多线程环境下的可见性
    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;
    }
}

关键点说明:

  1. volatile 关键字确保多线程环境下变量的可见性
  2. 双重检查锁定(双检锁):
    • 外层检查避免每次调用都进入同步块
    • 内层检查防止多个线程同时通过第一层检查后重复创建实例
  3. 私有构造函数阻止外部直接实例化
  4. 同步锁使用类对象作为锁,确保线程安全

此实现满足:

  • 延迟初始化(懒加载)
  • 线程安全
  • 高效(仅在首次初始化时同步)
相关推荐
名字还没想好☜1 天前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王1 天前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
一壶浊酒..1 天前
Scrape Webpack练习
开发语言·javascript·webpack
ZJH__GO1 天前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
程序员黑豆1 天前
Windows 系统 Java 环境变量配置全攻略:解决“不是内部或外部命令”
java·前端·ai编程
命运之光1 天前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
凤山老林1 天前
Spring Boot @Async 线上实战:从默认配置到生产级线程池治理
java·spring boot·后端
命运之光1 天前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人1 天前
C# | Serilog 新手入门
开发语言·c#·.net·log
marvelyu1 天前
每天10分钟学会OceanBase系列(Day 20):跨机房容灾实战——构建多数据中心高可用架构
java·大数据·数据库