设计模式---单例

单例模式

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

复制代码
/**
 * 单例中的饿汉式
 */
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 禁止对象创建时指令之间重排序,所以其他线程不会访问到一个未初始化的对象,从而保证

安全性。

相关推荐
我真的是大笨蛋14 小时前
开闭原则详解(OCP)
java·设计模式·性能优化·开闭原则·设计规范
编啊编程啊程14 小时前
gRPC从0到1系列【19】
java·spring boot·rpc·dubbo·nio
泥嚎泥嚎14 小时前
【Android】Android 的三种动画(帧动画、View 动画、属性动画)
java
qluka14 小时前
Android 窗口结构(三) Home Task 添加Home ActivityRecord
android·开发语言
这儿有一堆花15 小时前
PHP文件与本地及外部资源的深度交互指南
开发语言·php
灿烂阳光g15 小时前
App进程是如何从Zygote中fork出来的
android
不良人天码星15 小时前
使用Java连接redis以及开放redis端口的问题
java·开发语言·redis
谢语花15 小时前
【VS2022】LNK assimp64.lib找不到文件_openframework
android·运维·服务器
马克学长15 小时前
SSM村务管理系统s2qnw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·服务器·数据库
model200515 小时前
Android 配置多个 cmake
android