设计模式的“懒汉模式”

目录

单例模式:

适用场景:

懒汉模式:

使用与注意事项:


单例模式:

保证一个类只有一个实例,并且提供一个全局访问点


适用场景:

  • 1.需要更严格地控制全局变量时,使用单例模式。

  • 2.重量级的对象如线程池对象,数据库连接池对象/不需要多个实例的对象如工具类。

懒汉模式:

启动时不实例化,只有在真正使用的时候,才开始实例化。


使用与注意事项:

public class SingletonTest {
    public static void main(String[] args) {

    }

    class LazySingleton{
        //提供私有成员静态变量 volatile修饰的变量避免发生指令重排序
        private volatile static LazySingleton singleton;
        //私有构造函数(避免外部通过new创建实例)
        private LazySingleton() {
        }
        //全局唯一访问方法
        public static LazySingleton getSingleton() {
            //存在线程安全问题 ,多个‘null ==singleton 的线程’同时访问的话,
            // 就会创建多个实例,通过添加synchronized避免该问题
            if (null ==singleton){
                synchronized(LazySingleton.class){
                    if (null ==singleton){
                        /**
                         * new操作:jvm操作步骤
                         * 1.在堆上开辟一个空间
                         * 2. 返回临时区域“操作数栈”对空间进行初始化
                         * 3.赋值 singleton
                         * jvm有可能对这三个步骤指令进行重排序,导致使用到尚未初始化的实例
                         * volatile修饰的变量避免发生指令重排序
                         */
                        singleton = new LazySingleton();
                    }
                }
            }
                return singleton;

        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值