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# - 设计模式目录

  • 相关阅读:
    ssm框架搭建
    属性注入
    布隆过滤器
    浅谈动态规划
    双指针技巧汇总
    详解二分查找算法
    java内存模型的实现
    JVM内存结构、Java内存模型和Java对象模型
    浅谈动态规划以及相关的股票问题
    了解重构
  • 原文地址:https://www.cnblogs.com/myrocknroll/p/8596879.html
Copyright © 2011-2022 走看看