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

  • 相关阅读:
    Spring Boot教程(三十)使用Spring-data-jpa(1)
    Spring Boot教程(二十九)使用JdbcTemplate操作数据库
    Spring Boot教程(二十八)通过JdbcTemplate编写数据访问
    Spring Boot教程(二十七)整合Spring Security
    Spring Boot教程(二十六)使用Spring Security安全控制
    Spring Boot教程(二十五)返回JSON格式
    gl 绘制多边形的函数解析 分类: OpenGL(转)
    OpenGL超级宝典笔记——画三角形(转)
    OpenGL_Qt学习笔记之_03(平面图形的着色和旋转)(转)
    OpenGL超级宝典笔记——贝塞尔曲线和曲面(转)
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2621056.html
Copyright © 2011-2022 走看看