设计模式---单例

单例模式

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

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

安全性。

相关推荐
观熵3 分钟前
Android 相机系统全景架构图解
android·数码相机·架构·camera·影像
cxyxiaokui00125 分钟前
线程池的“变形记”:核心线程数居然能随时变大变小?
java·面试
灵魂猎手32 分钟前
11. Mybatis SQL解析源码分析
java·后端·源码
Huntto1 小时前
在Android中使用libpng
android
努力的小郑1 小时前
别再说你会 new Object() 了!JVM 类加载的真相,绝对和你想的不一样
java·jvm·面试
cxyxiaokui0011 小时前
论如何优雅地让AI“闭嘴”:深入SpringAI的流式停止与记忆难题
java·后端
嗝屁小孩纸1 小时前
使用EasyExcel自定义导出表格
java·excel
秦禹辰1 小时前
本地Docker部署开源Web相册图库Piwigo与在线远程访问实战方案
开发语言·后端·golang
the beard2 小时前
深入理解Java多线程:状态、安全、同步与通信
java·开发语言
pengzhuofan2 小时前
Java设计模式-享元模式
java·设计模式·享元模式