• 单例模式


    单例模式(Singleton):保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个

    饿汉式(推荐):

    public class Singleton {
        
        // 类加载时生成实例对象,避免多线程时出问题
        // 私有方法,避免被外部类直接访问
        // 静态属性,保证实例对象可以在提供给外部类调用的方法内部使用
        private static Singleton singleton = new Singleton() ;
        
        // 构造函数必须是私有的 
        // 这样在外部便无法使用 new 来创建该类的实例 
        private Singleton(){}
        
        // 静态方法,保证外部类调用时不需要生成对象
        // 获取实例的唯一方法
        public static Singleton getInstance(){
            return singleton;
        }
    
    }

    懒汉式(适用于有些类比较庞大,延迟加载有助于提升性能。):

    public class Singleton {
        
        // 定义一个私有的静态全局变量来保存该类的唯一实例
        private static Singleton singleton;
    
        // 构造函数必须是私有的
        // 这样在外部便无法使用 new 来创建该类的实例
        private Singleton() {}
    
        // 定义一个全局访问点
        // 设置为静态方法
        // 则在类的外部便无需实例化就可以调用该方法
        public static Singleton GetInstance() {
    
            /**
             * 所以在没有第一重 singleton == null 的情况下,也是可以实现单例模式的?那么为什么需要第一重 singleton == null 呢?
             * 这里就涉及一个性能问题了,因为对于单例模式的话,new Singleton()只需要执行一次就 OK 了,
             * 而如果没有第一重 singleton == null 的话,每一次有线程进入 GetInstance()时,均会执行锁定操作来实现线程同步,
             * 这是非常耗费性能的,而如果我加上第一重 singleton == null 的话,
             * 那么就只有在第一次,也就是 singleton ==null 成立时的情况下执行一次锁定以实现线程同步,
             * 而以后的话,便只要直接返回 Singleton 实例就 OK 了而根本无需再进入 lock 语句块了,这样就可以解决由线程同步带来的性能问题了。
             */
            // 这里可以保证只实例化一次,即在第一次调用时实例化,以后调用便不会再实例化,第一重 singleton == null
            if (singleton == null) {
                
                synchronized (Singleton.class) {
                    
                    // 第二重 singleton == null
                    if (singleton == null) {
                        singleton = new Singleton();
                    }
                }
            }
            return singleton;
        }
    }
  • 相关阅读:
    CMLLVDS
    js获取url中的参数(解决中文乱码)
    解决跳转出现 No input file specified.
    ThinkPHP关联模型详解
    Thinkphp表单自动验证
    手机号登录注册
    JS实现每隔一段时间数量增加或减少
    文章或者观点说说等点赞功能实现(thinkphp)
    thinkphp整合Ueditor编辑器
    点击切换状态 类似开关按钮
  • 原文地址:https://www.cnblogs.com/Jtianlin/p/4804894.html
Copyright © 2020-2023  润新知