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();
            }
        }
  • 相关阅读:
    Quartz任务调度系统,克隆表达式
    Java故障分析基础
    SpringData JPA整理
    Mockito教程
    SpringMVC单元测试-MockMvc
    SpringBoot Actuator & SpringBoot Admin
    Swagger
    Spring @AliasFor
    java命令查询属性信息
    windows版本免安装redis, nginx, zookeeper
  • 原文地址:https://www.cnblogs.com/lemonP/p/7374110.html
Copyright © 2011-2022 走看看