设计模式---单例

单例模式

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

复制代码
/**
 * 单例中的饿汉式
 */
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 天前
BOM模型
开发语言·前端·javascript·bom
二哈喇子!1 天前
Java开发工具——IDEA(修改全局配置,提升工作效率)
java·编辑器·intellij-idea
二哈喇子!1 天前
空指针异常
开发语言
强子感冒了1 天前
Java网络编程学习笔记,从网络编程三要素到TCP/UDP协议
java·网络·学习
咚为1 天前
Rust Print 终极指南:从底层原理到全场景实战
开发语言·后端·rust
二哈喇子!1 天前
SpringBoot项目右上角选择ProjectNameApplication的配置
java·spring boot
%xiao Q1 天前
GESP C++五级-202406
android·开发语言·c++
Psycho_MrZhang1 天前
Neo4j Python SDK手册
开发语言·python·neo4j
Traced back1 天前
# C# + SQL Server 实现自动清理功能的完整方案:按数量与按日期双模式
开发语言·c#
sin22011 天前
MyBatis的执行流程
java·开发语言·mybatis