zoukankan      html  css  js  c++  java
  • 单例模式 简单分析

      /// <summary>
        /// test单例模式第一种 不考虑高并发的模式
        /// </summary>
        public class singleton
        {
            //静态私有的字段为什么要static呢  因为为了被公开的方法GetInstance调用 为什么公开的方法GetInstance要被生命成static呢 因为如果不是静态的  外部根本就调用不到了这个方法  因为外部不能new 只能根据类名称调用里面的公开方法GetInstance
            private static singleton single;
            //私有的构造方法确保用户不能new出实例
            private singleton()
            { }
            public static singleton GetInstance()
            {
                //首先判断是否有这个实例  如果没有 new一个新的实例 
                if (single == null)
                {
                    single = new singleton();//为什么这里能new  因为构造函数是私有的private的
                }
                //结果放回
                return single;
            }
        }
    
        //上面的这个虽然能够解决类只能实例化一个对象的问题 但是当用户量访问量过大时  会出现创建出多个对象的问题,例如A过来以后 正在创建实例 此时实例还没有创建成功,B也过来创建实例  一看实例还是null  于是B创建了一个实例  此时A也创建出了实例  解决方法是加上lock锁  下面是lock锁的例子
    
        public class singletonTwo
        {
            //静态的私有的字段
            private static singletonTwo ST;
            //lock锁使用的私有静态对象
            private static object _Object = new object();
            //私有的构造方法 确保类的外部不能new
            private singletonTwo()
            { }
            //对外公开的实例化的静态方法
            public static singletonTwo GetInstance()
            {
                //如果实例为空 在if的内层加lock锁  如果不为空 直接返回实例
                if (ST == null)//这个循环主要是为了节省开销 如果每次每次进来都加把锁 再进行查看实例是否存在浪费资源 如果实例已经存在了 就不在需要锁机制  直接返回实例
                {
                    lock (_Object)//枷锁
                    {
                        if (ST == null)
                        {
                            ST = new singletonTwo();
                        }
                    }
    
                }
                return ST;
            }
    
        }
    

      

  • 相关阅读:
    【BZOJ3105】【CQOI2013】新Nim游戏
    【BZOJ3884】上帝与集合的正确用法
    【BZOJ3518】点组计数
    【BZOJ4804】欧拉心算
    【BZOJ4059】Non-boring sequences
    【BZOJ 4016】 [FJOI2014]最短路径树问题
    【BZOJ 2744】【HEOI2012】朋友圈
    【BZOJ4417】: [Shoi2013]超级跳马
    【BZOJ 2713】[Violet 2]愚蠢的副官&&【BZOJ1183】[Croatian2008]Umnozak——【数位DP】
    【BZOJ】1969: [Ahoi2005]LANE 航线规划
  • 原文地址:https://www.cnblogs.com/lierjie/p/3841072.html
Copyright © 2011-2022 走看看