此次的题目是我还在写单例模式的blog时碰到的难题,因此 今日专业写了的demo让自身记牢如何简易的应用线程同步。

一直担心的是怎样在for循环中数次实例化对象,好重现单例模式在沒有上锁的状况下出現好几个案例对象的不正确。

先给大伙儿看一下我简易完成的线程同步案例对象。

计划方案一:

Demo.cs

    public class Demo
    {
        private static Demo _demo = null;

        /// <summary>
        /// 构造方法
        /// </summary>
        private Demo()
        {
            Console.WriteLine("结构了{0}", GetType().Name);
        }

        /// <summary>
        /// 获得此类的唯一案例
        /// </summary>
        /// <returns>此类的唯一案例</returns>
        public static Demo GetInstance()
        {
            if (_demo == null)
                _demo = new Demo();
            return _demo;
        }
    }

Program.cs,手机客户端编码

                Demo d1 = null;
                Demo d2 = null;
                //线程同步建立对象案例
                var t1 = new Thread(() => { d1 = Demo.GetInstance(); });
                var t2 = new Thread(() => { d2 = Demo.GetInstance(); });

                t1.Start();
                t2.Start();
                Thread.Sleep(1000);//主线任务程等候子进程实行进行,为d1和d2自变量取值
                Console.WriteLine("d1 == d2 {0}", object.ReferenceEquals(d1, d2));
                Console.Read();
            

輸出:

輸出2个不一样引入的对象,做到了我要的目地。

可是在我的脑子里,一直有一个有关for循环能够线程同步建立案例的方式,便是记不起来,今日在搜集资料的情况下不经意中看到了这类方式,我也立刻记录下来,随后夜里加个班写出去,那样在头脑中有一个印像。

 

计划方案二:

Program.cs 

                for (int i = 0; i < 2; i  )
                {
                    new Action(() => { Demo.GetInstance(); }).BeginInvoke(null, null);
                }
                Console.Read();
            

輸出:

那样调节单例模式的情况下就可以重现未上锁的不正确了,也解决了我心中的疑惑,找到处理for循环中线程同步建立案例的方式。

 

确实是高兴呐!