【设计模式-单例设计模式】

设计模式-单例设计模式

单例设计模式

singleton
模式定义:
保证一个类只有一个实例,并且提供一个全局访问点。
场景:
重量级的对象,不需要多个实例,如:线程池,数据库连接池。

类图
Singleton
- singleton : Singleton
- Singleton()
+getInstance(): Singleton

知识点

  1. 模式定义/应用场景/类图分析;
  2. 字节码知识/字节码指令重排;
  3. 类加载机制;
  4. JVM序列化机制;
  5. 单例模式子啊spring框架和JDK源码中的应用;

懒汉模式

定义:延迟加载,只有在真正使用的时候,才开始加载。
1)线程安全问题
2)double check 加锁优化
3)编译器(JIT),CPU有可能对指令进行重排序,导致使用到尚未初始化的实例,可以通过添加volatile关键字进行修饰,对于volatile修饰的字段,可以防止指令重排。
编码:

class LazySingleton {
    private volatile static LazySingleton instance;

    private LazySingleton() {
    }

    public static LazySingleton getInstance() {
        if (instance == null) {
            synchronized (LazySingleton.class) {
                if (instance == null) {
                    instance=new LazySingleton();
                    //字节码
                    //JIT,CPU 指令重排
                    //1.分配空间
                    //2.初始化
                    //3.引用赋值
                }
            }
        }
        return instance;
    }

饿汉模式

定义:类加载的初始化阶段就完成了实例初始化。本质上是借助于jvm类加载机制,保证实例的唯一性。
类加载过程:
1)加载二进制数据到内存中,生成对应的class数据结构
2)连接:a.验证,b.准备(给类的静态成员变量赋默认值),c.解析
3.初始化:给类的静态变量赋初值

class HungrySingleton {
    private static HungrySingleton instance = new HungrySingleton();

    private HungrySingleton() {
    }

    public static HungrySingleton getInstance() {
        return instance;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值