C#单例模式

主程序入口

class Program
    {
        static void Main(string[] args)
        {
            MawbMethod M = MawbMethod.getMawbObj();
            M.Print();

            //Thread thread = new Thread(fun);
            //thread.Start();
            //thread.IsBackground = true;

            //测试多线程情况下不加lock
            //TaskFactory taskFactory = new TaskFactory();
            //List<Task> taskList = new List<Task>();
            //for (int i = 0; i < 6; i++)
            //{
            //    taskList.Add(taskFactory.StartNew(() =>
            //    {
            //        MawbMethod M = MawbMethod.getMawbObj();
            //    }));
            //}

            //taskFactory.ContinueWhenAny(taskList.ToArray(), t => {
            //    Console.WriteLine("有一个任务执行完成");
            //});

            //taskFactory.ContinueWhenAny(taskList.ToArray(), t => {
            //    Console.WriteLine("所有任务执行完成");
            //});
            Console.Read();
        }

        //private static void fun()
        //{
        //    MawbMethod M = MawbMethod.getMawbObj();
        //    M.Print();
        //}
    }

实例化类

 public class MawbMethod
    {
        private static volatile MawbMethod mawbAttribute;
        private static readonly object locker = new object();  

        //构造函数必须是私有的
        //这样在外部便无法使用 new 来创建该类的实例
        private MawbMethod()
        { 

        }

        /// <summary>
        /// 定义一个全局访问点
        /// 设置为静态方法
        /// 则在类的外部便无需实例化就可以调用该方法
        /// </summary>
        /// <returns></returns>
        public static MawbMethod getMawbObj()
        {
             //为什么加两次等于空判断,比如5个线程同时进入lock中,其中第一个线程正在执行,其余4个线程等待,当第1个线程解锁后,
            //公共变量已经赋值,如果不加判断会出现重复申明。
            if (mawbAttribute == null)
            {
                lock (locker)
                {
                    if (mawbAttribute == null)
                    {
                        Console.WriteLine("对象: " + mawbAttribute);
                        Console.WriteLine("线程时间: "+DateTime.Now);
                        mawbAttribute = new MawbMethod();
                    }
                }
            }

            return mawbAttribute;
        }

        public void Print()
        {
            Console.WriteLine("成功!");
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值