zoukankan      html  css  js  c++  java
  • 单例模式 双重校验锁

     public class Singleton
        {
            private static Singleton singleton;
            private static readonly object obj = new object();
            private Singleton()
            { }
            public static Singleton GetInstance()
            {
                if (singleton == null)
                {
                    lock (obj)
                    {
                        if (singleton == null)
                            singleton = new Singleton();
                    }
                }
                return singleton;
            }
        }
    View Code

    单例模式顾名思义只允许有一个实例。

    构造函数一定要是私有的.保证外部不能通过new来生成新的实例。

    并且暴露出来一个CreateInstance入口去给外部调用创建实例,该方法一定要是public的,并且static。

    双重校验锁的目的:线程安全

    第一重校验:效率问题,如果不要这重校验,每个进程进来都会被阻塞,影响效率。

    加锁:阻塞

    第二重校验:保证只能创建一个实例。

    class Program
        {
            static void Main(string[] args)
            {
                Singleton singleton = Singleton.GetInstance();
                Singleton singleton2 = Singleton.GetInstance();
                Console.WriteLine(singleton == singleton2); // true
                Console.WriteLine(singleton.Equals(singleton2)); //true
                Console.ReadLine();
            }
        }
  • 相关阅读:
    中断解析
    中断分类
    中断分类
    在iOS开发中使用FMDB
    大数据权限授权管理框架:Apache Sentry和Ranger
    Flink FileSystem的connector分析
    Flink FileSystem的connector分析
    Flink JobManager的HA原理分析
    Flink JobManager的HA原理分析
    Flink的State概述
  • 原文地址:https://www.cnblogs.com/lemonP/p/7374110.html
Copyright © 2011-2022 走看看