设计模式---单例

单例模式

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

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

安全性。

相关推荐
Densen2014几秒前
企业H5站点升级PWA (二)
java·后端·spring
2401_88456324几秒前
C++中的原型模式变体
开发语言·c++·算法
Aaa111114432 分钟前
限流算法 限流算法
java·开发语言
张宏2366 分钟前
android camera hal3-camera_module_t
android
李子琪。8 分钟前
基于“产业-空间-社会”三重网络的传统工业城市现代化转型路径研究——以广西柳州市典型
java·人工智能·经验分享
zjneymar9 分钟前
Mybatis的动态sql
java·sql·mybatis
yy我不解释13 分钟前
关于comfyui的mmaudio音频生成插件时时间不一致问题(四)(video upload)(解决方法)
开发语言·python·ai作画·音视频·comfyui
干啥啥不行,秃头第一名13 分钟前
C++与机器学习框架
开发语言·c++·算法
花月C14 分钟前
基于WebSocket的 “聊天” 业务设计与实战指南
java·网络·后端·websocket·网络协议
hongtianzai15 分钟前
Laravel7.x十大核心特性解析
java·c语言·开发语言·golang·php