单例模式代码

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

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

此实现满足:

  • 延迟初始化(懒加载)
  • 线程安全
  • 高效(仅在首次初始化时同步)
相关推荐
海兰几秒前
【第21篇-续】graph-Stream-Node改造为适配openAI模型示例
java·人工智能·spring boot·spring·spring ai
vKd0Ff21L3 分钟前
如何在Dev-C++中设置TDM-GCC为默认编译器第九十一篇
java·jvm·c++
武子康5 分钟前
Java-221 RocketMQ 消息存储核心原理:CommitLog、ConsumerQueue、IndexFile 与消息过滤机制
java·大数据·分布式·消息队列·rabbitmq·rocketmq·java-rocketmq
北风toto12 分钟前
为什么 IntelliJ IDEA Community 无法开发 Vue?——附解决方案
java·vue.js·intellij-idea
programhelp_13 分钟前
Google 2026 New Grad SDE VO 三轮面试详解 | 含Behavioral、Coding、Design
java·服务器·数据库
froginwe1113 分钟前
Vue.js 监听属性
开发语言
c++逐梦人14 分钟前
五种IO模型与⾮阻塞IO
开发语言·网络
翎沣16 分钟前
C++面向对象三大特性
开发语言·c++
驭渊的小故事17 分钟前
java中的进程的详细解析
java·开发语言
烟雨江南aabb22 分钟前
Python第六弹:python爬虫篇:什么是爬虫
开发语言·爬虫·python