c#中關於多線程建立對象的樣本分享

來源:互聯網
上載者:User
本次的標題是我在寫單例模式的部落格時遇到的問題,所以今天專門寫了的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();

輸出:

輸出兩個不一樣引用的對象,達到了我想要的目的。

但是在我的腦海中,一直有個關於for迴圈可以多線程建立執行個體的方法,就是想不起來,今天在查資料的時候無意中看到了這種方法,我就立馬記下來,然後晚上加個班寫出來,這樣在腦子中有個印象。

方案二:

Program.cs


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

輸出:

這樣調試單例模式的時候就可以複現未加鎖的錯誤了,也解決了我心頭的疑問,找到瞭解決for迴圈中多線程建立執行個體的方法。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.