设计模式---单例

单例模式

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

复制代码
/**
 * 单例中的饿汉式
 */
class Single {
    private static Single single = new Single();

    private Single() {

    }

    public static Single getInstance() {
        return single;
    }
}

/**
 * 懒汉式
 */
class Single2 {
    private volatile static Single2 single2;

    private Single2() {
    }

    public static Single2 getInstance() {

        if (single2 == null) {
            synchronized (Single2.class) {
                if (single2 == null) {
                    single2 = new Single2();
                }
            }

        }
        return single2;
    }

正确的双重检查锁定模式需要需要使用volatile。volatile主要包含两个功能。

  1. 保证可见性。使用volatile 定义的变量,将会保证对所有线程的可见性。
  2. 禁止指令重排序优化。

由于volatile 禁止对象创建时指令之间重排序,所以其他线程不会访问到一个未初始化的对象,从而保证

安全性。

相关推荐
vx-程序开发16 分钟前
【计算机毕设】51300童装超市管理系统的设计与实现
java·vue.js·spring boot·源码·课程设计·毕设·大作业
青柠之夏cc37 分钟前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
ym hyd 11144 分钟前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
risc1234561 小时前
什么是码点?
java
OKkankan1 小时前
Python 高阶语法(一):高阶函数、闭包、lambda 与 functools——从底层真正理解装饰器
开发语言·python
geovindu1 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
福大大架构师每日一题1 小时前
Rust 1.99.0发布:C 可变参数、裸函数、Cargo 配置、Rustdoc 性能与大量兼容性调整全解析
c语言·开发语言·rust
JavaPub-rodert1 小时前
公共 Docker 镜像源总失效?用 Harbor Proxy Cache 自建 Docker Hub 镜像缓存
java·缓存·docker
智鸟科技GemeOpen开发者智能设备1 小时前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居
传奇开心果编程1 小时前
【Compose Multiplatform 跨端开发学与练】第5课 网络与数据层
android·网络·学习·ui·ios·kotlin·composer