c# 单例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace Singleton
{
    public class SingletonTest
    {
        private static SingletonTest singleton;
        private static readonly object syncObject = new object();
        /// <summary>
        /// 构造函数必须是私有的
        /// 这样在外部便无法使用 new 来创建该类的实例
        /// </summary>
        private SingletonTest()
        { }
        /// <summary>
        /// 定义一个全局访问点
        /// 设置为静态方法
        /// 则在类的外部便无需实例化就可以调用该方法
        /// </summary>
        /// <returns></returns>
        public static SingletonTest getSingleton()
        {
            //这里可以保证只实例化一次
            //即在第一次调用时实例化
            //以后调用便不会再实例化
            //第一重 singleton == null
            if (singleton == null)
            {
                lock (syncObject)
                {
                    //第二重 singleton == null
                    if (singleton == null)
                    {
                        Console.WriteLine(String.Format("我是被线程:{0}创建的!", Thread.CurrentThread.Name));
                        singleton = new SingletonTest();
                    }
                }
            }
            return singleton;
        }
    }
}

 

posted @ 2017-03-27 18:10  小小高  阅读(122)  评论(0编辑  收藏  举报