单例模式代码

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

复制代码
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. 同步锁使用类对象作为锁,确保线程安全

此实现满足:

  • 延迟初始化(懒加载)
  • 线程安全
  • 高效(仅在首次初始化时同步)
相关推荐
腻害兔28 分钟前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
SeaTunnel43 分钟前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影1 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code2 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
Miao121312 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔2 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
CRMEB系统商城3 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源
keyipatience4 小时前
线程栈与TLS和线程互斥
java·linux·服务器·开发语言·ubuntu
我的xiaodoujiao4 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099675 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能