单例模式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();
                });
            }

 

posted @ 2017-05-17 23:17  字里行间  阅读(179)  评论(0编辑  收藏  举报