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

    public static object _islock = new object();
            #region  单例模式
            //只能通过内部创建对象,不让外部创建对象
            private static Singleton _singleton = null;
            public static Singleton CreateInstance()
            {
                //先判断是否已经初始化过了,如果初始化过了就不需要锁住等待
                if (_singleton == null)
                {
                    //多个线程用lock(锁) 锁住,执行完了之后在释放
                    lock (_islock)
                    {
                        //判断第一次进来创建对象,如果没创建就去创建,创建了直接返回
                        if (_singleton == null)
                        {
                            _singleton = new Singleton();
                        }
                    }
                }
                return _singleton;
            }
            #endregion
    #region  静态构造函数单例模式
            /// <summary>
            /// 静态构造函数,CLR运行第一次使用这个类时,一定会执行,并且只会执行一次
            /// </summary>
            static Singleton() {
                _singletonSecond = new Singleton();
            }
            private static Singleton _singletonSecond = null;
            public static Singleton CreateInstanceSecond()
            {
                return _singletonSecond;
            }
            #endregion
           //每个类都有一个默认的无参构造函数
                //调用了默认的无参构造函数
                //测试,创建十个对象
                //目的,只初始化一次
                //单个线程
                for (int i = 0; i < 10; i++)
                {
                    Singleton singleton = new Singleton();
                }
    
                //多个线程
                List<Task> list = new List<Task>();
                TaskFactory taskFactory = new TaskFactory();
    
                for (int i = 0; i < 10; i++)
                {
                    taskFactory.StartNew(() =>
                    {
                        Singleton singleton = Singleton.CreateInstance();
                    });
                }
    将来的你,一定会感谢现在努力的自己!
  • 相关阅读:
    Android开发之修改Manifest中meta-data的数据
    Android开发之StrictMode
    Cookie默认不设置path时,哪些请求会携带cookie数据
    Servlet中的请求转发
    AndroidCamera开发学习笔记01
    AsyncTask源码解读
    Android Studio自定义签名文件
    Kotlin:Android世界的Swift
    C# 传值给C++
    .NET CLR 运行原理
  • 原文地址:https://www.cnblogs.com/GreatPerson/p/6870083.html
Copyright © 2011-2022 走看看