单例模式的双重检查锁

第一层检查是判断实例是否已经被创建

过了第一层检查后就进入synchronized,同步代码块,

在同步代码块中再次检查,防止有多个线程同时进入同步代码块。

实例变量需要用volatile修饰,这样多个线程才能看见

java 复制代码
public class Singleton {
    private volatile static Singleton uniqueInstance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (uniqueInstance == null) {
            synchronized (Singleton.class) {
                if (uniqueInstance == null) {
                    uniqueInstance = new Singleton();
                }
            }
        }
        return uniqueInstance;
    }
}
相关推荐
好家伙VCC7 分钟前
**基于RISC-V架构的嵌入式系统开发:从零开始构建高效低功耗应用**在当前物联网(IoT)和边缘计
java·python·物联网·架构·risc-v
wyu7296117 分钟前
Spring框架学习笔记:从IoC到声明式事务
java
沐知全栈开发21 分钟前
CSS Text(文本)
开发语言
前进吧-程序员26 分钟前
现代 C++ 异步编程:从零实现一个高性能 ThreadPool (C++20 深度实践)
开发语言·c++·c++20
qqacj29 分钟前
Spring Security 官网文档学习
java·学习·spring
Rsun0455139 分钟前
10、Java 桥接模式从入门到实战
java·开发语言·桥接模式
金銀銅鐵41 分钟前
[Java] 从 class 文件看 cglib 对 MethodInterceptor 的处理 (下)
java·后端
lee_curry44 分钟前
Java中关于“锁”的那些事
java·线程·并发·juc
jieyucx1 小时前
Golang 完整安装与 VSCode 开发环境搭建教程
开发语言·vscode·golang
pearlthriving1 小时前
c++当中的泛型思想以及c++11部分新特性
java·开发语言·c++