zoukankan      html  css  js  c++  java
  • C#

    单例模式

    问题场景

    想要在内存中只创建一个全局唯一的对象,该类型只能new一次。可以将对象作为静态字段或属性存取,在静态构造函数中初始化这个属性为对象,也可以在某个方法中做一个判定,如果该字段或属性已经被初始化则直接返回它,否则new一个即可,但是在多线程竞争资源的情况下,可能会导致静态构造函数或某个方法被调用两次,导致内存中出现两个该类型的对象。

    总结模式

    利用线程锁加双重判定可以实现完美的单例模式。

    示例代码

    public class Single
    {
        private static readonly object lockObj = new object( );
        private static Single single;
        public static Single GetSingle( )
        {
            if (single != null) return single;//线程锁容易耗费时间,所以此处预先做一个判定,避免在single已经创建完成之后其它线程去请求锁
            lock (lockObj)
            {
                if (single != null) return single; //防止当A线程即将创建实例之前,B线程刚好执行完第一个判定,B就要申请锁,A创建完实例之后,B就会进入锁区继续创建实例
                single = new Single( );
                return single;
            }
        }
    }

     

    C# - 设计模式目录

  • 相关阅读:
    [ APIO 2015 ] 雅加达的摩天楼
    「POI2011 R1」Conspiracy
    「COCI2016/2017 Contest #2」Bruza
    「THUWC 2017」随机二分图
    「HAOI2015」按位或
    Topcoder Srm 726 Div1 Hard
    「LOJ6482」LJJ爱数数
    「2017 山东一轮集训 Day4」基因
    「Codechef April Lunchtime 2015」Palindromeness
    「UOJ207」共价大爷游长沙
  • 原文地址:https://www.cnblogs.com/myrocknroll/p/8596879.html
Copyright © 2011-2022 走看看