单例模式代码

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

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

此实现满足:

  • 延迟初始化(懒加载)
  • 线程安全
  • 高效(仅在首次初始化时同步)
相关推荐
伯恩bourne1 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_1 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs2 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲2 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户21296835261682 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
helmsail2 小时前
05 管理活动与选品
java
天远数科2 小时前
Java数据工程:利用天远人车核验加强版优化智慧高速ETC发行合规体验
java·人工智能
.Bryce.2 小时前
在智能体中使用A2A工具:让大模型自己决定“该找谁帮忙“
android·java·服务器·redis·后端·agent·a2a
xiaoqiMikko3 小时前
fastjson 1.2.84 的补丁关掉了一个缓存:addAccept 包前缀白名单下,反序列化慢了 13~28 倍
java·后端·性能优化