zoukankan      html  css  js  c++  java
  • 单例模式

    单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

    结构图:

    image

     //单线程

        class Singleton
        {
            private static Singleton instance;

            private Singleton()
            { }

            public static Singleton GetInstance()
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
     
    //多线程
        class Singleton2
        {
            private static Singleton2 instance;
            private static readonly object synvRoot = new object();

            private Singleton2()
            { }

            public static Singleton2 GetInstance()
            {
                if (instance == null)
                {
                    lock (synvRoot)
                    {
                        if (instance == null)
                        {
                            instance = new Singleton2();
                        }
                    }
                }
                return instance;
            }

            //线程【串行化】的方式睡眠了 20 毫秒
            public static void ddd()
            {
                lock (synvRoot)
                    System.Threading.Thread.Sleep(20);
            }
        }
     

     主函数:

        class Program
        {
            static void Main(string[] args)
            {
                Singleton s1 = Singleton.GetInstance();
                Singleton s2 = Singleton.GetInstance();
                if (s1 == s2)
                {
                    Console.WriteLine("s1和s2是相同实例");
                }

                //多线程
                Singleton2 s3 = Singleton2.GetInstance();
                Singleton2 s4 = Singleton2.GetInstance();
                if (s3 == s4)
                {
                    Console.WriteLine("s1和s2是相同实例");
                }

                Console.ReadKey();
            }
        }

    Lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区,如果其他线程试图进入锁定的代码,侧他将一直等待,直到被该对象释放。

  • 相关阅读:
    8086汇编--1--通用寄存器和简单汇编指令
    写在前面的吐槽!
    汇编/Debug学习计划
    开篇-引文
    看懂别人的代码,和自己能写代码是两回事
    内存管理
    Flink基本原理及应用场景
    IDEA Maven Dependencies标红报错
    Spark Streaming流式处理
    Kafka
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2621056.html
Copyright © 2011-2022 走看看