设计模式---单例

单例模式

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

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

安全性。

相关推荐
曹牧1 分钟前
Java:Unix时间戳
java·开发语言
会编程的土豆8 分钟前
Go 里的 error 接口 + 假 nil(超级重点)
开发语言·后端·golang
愿天垂怜8 分钟前
【C++脚手架】ffmpeg 库的介绍与使用
linux·服务器·开发语言·c++·ide·git·ffmpeg
涛声依旧-底层原理研究所8 分钟前
Node.js在高并发低延迟场景中的优势
java·人工智能·python·node.js
并不喜欢吃鱼9 分钟前
从零开始 C++-----十一【C++ 数据结构】红黑树全解析:从定义到工程实现(一文搞定,十分详细)
开发语言·数据结构·c++
不会C语言的男孩11 分钟前
C++ Primer Plus 第7章:函数——C++的编程模块
开发语言·c++
方也_arkling11 分钟前
【Java-Day09】继承
java·开发语言
西安邮电大学12 分钟前
Kafka保证消息顺序性
java·后端·kafka
迈巴赫车主12 分钟前
蓝桥杯21247弹跳鞋java
java·开发语言·数据结构·算法·职场和发展·蓝桥杯
xinhuanjieyi14 分钟前
JavaFX WebView 不支持 Brotli (br) 压缩编码警告修复
java