zoukankan      html  css  js  c++  java
  • C# 单例模式(Single)

    保证一个类仅有一个实例,并提供一个访问点,代码如下:

        public sealed class Logger
        {
            static Logger _logger = null;
    
            Logger()
            {
            }
    
            public static Logger Instance
            {
                get
                {
                    if (_logger == null)
                    {
                        _logger = new Logger();
                    }
                    return _logger;
                }
            }
        }

     多线程单例代码如下:

        public sealed class Logger
        {
            //第一步:定义私有变量和同步加锁标识
            private static Logger _logger; 
            private static readonly object locker = new object();
             
            // 第二步:禁止对外公开构造函数 
            private Logger()
            { 
            }
    
            //第三步:对外公开一个实例
            public static Logger Instance
            {
                get
                {
                    //双重判定:因为lock很消耗资源,所以先判断,减少不必要的lock
                    if(_logger==null)
                    {
                        //加锁阻塞其它线程创建实例
                        lock(locker)
                        {
                            if (_logger == null)
                            {
                                _logger = new Logger();
                            }
                        } 
                        return _logger;
                    }
                    
                }
    
            }
        }
  • 相关阅读:
    ASP.Net 反射显示
    ASP.Net 反射简单工厂模式
    ASP.Net MVC生成验证码
    ASP.Net EF架构
    ASP.Net 邮箱发送
    ASP.Net 反射简单
    ASP.Net 显示
    新年快乐
    测试开发比
    Linkbot介绍
  • 原文地址:https://www.cnblogs.com/kavilee/p/2359347.html
Copyright © 2011-2022 走看看