设计模式---单例

单例模式

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

复制代码
/**
 * 单例中的饿汉式
 */
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 JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马1 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261351 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
逐光老顽童1 天前
Java 与 Kotlin 混合开发避坑指南:30 个真实案例实录
android·kotlin
用户3721574261351 天前
Java 打印 Word 文档:从基础打印到高级设置
java
爱勇宝2 天前
鸿蒙生态的下半场:开发者不只要能开发,还要能赚钱
android·前端·程序员
Yeyu2 天前
刷新一帧的艺术:invalidate / postInvalidate / postInvalidateOnAnimation全解析
android
用户3521802454752 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
潘潘潘2 天前
Android OTA 升级原理和流程介绍
android
东坡白菜2 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈