介绍
小编给大家分享一下c#中多线程如何创建对象,希望大家阅读完这篇文章之后都有所收获、下面让我们一起去探讨吧!
一直纠结的是怎么在为循环中多次实例化对象,好复现单例模式在没有加锁的情况下出现多个实例对象的错误。
先给大家看一下我简单实现的多线程实例对象。
<强>方案一:强>
演示。cs
,,,,public class 演示 ,,,{,,,,,,,private static Demo _demo =,零,,,,,,,,,///,& lt; summary> ,,,,,,,///,构造函数,,,,,,,,///,& lt;/summary> ,,,,,,,private 演示() ,,,,,,,{ ,,,,,,,,,,,Console.WriteLine(“构造了{0},,,方法(). name); ,,,,,,,},,,,,,,,///,& lt; summary> ,,,,,,,///,获取该类的唯一实例,,,,,,,,///,& lt;/summary> ,,,,,,,///,& lt; returns>该类的唯一实例& lt;/returns> ,,,,,,,public static Demo GetInstance () ,,,,,,,{,,,,,,,,,,,if (_demo ==, null) ,,,,,,,,,,,,,,,_demo =, new 演示(),,,,,,,,,,,,,return _demo; ,,,,,,,} ,,,}
程序。cs,客户端代码
,,,,,,,,,,,,,,,,Demo d1 =,空; ,,,,,,,,,,,,,,,Demo d2 =,零,,,,,,,,,,,,,,,,,//多线程创建对象实例 ,,,,,,,,,,,,,,,var t1 =, new 线程((),=祝辞,{,d1 =, Demo.GetInstance ();,}),,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,var t2 =, new 线程((),=祝辞,{,d2 =, Demo.GetInstance ();,}); ,,,,,,,,,,,,,,,t1.Start (); ,,,,,,,,,,,,,,,t2.Start (); ,,,,,,,,,,,,,,,thread . sleep(1000);//主线程等待子线程执行完成,为d1和d2变量赋值 ,,,,,,,,,,,,,,,Console.WriteLine (“d1 ==, d2 {0},,, object.ReferenceEquals (d1, d2)); ,,,,,,,,,,,,,,,Console.Read ();
输出:
输出两个不一样引用的对象,达到了我想要的目的。
但是在我的脑海中,一直有个关于为循环可以多线程创建实例的方法,就是想不起来,今天在查资料的时候无意中看到了这种方法,我就立马记下来,然后晚上加个班写出来,这样在脑子中有个印象。
<强>方案二:强>
程序。cs
,,,,,,,,,,,,,,,,for (int 小姐:=,0;,小姐:& lt,, 2,,我+ +) ,,,,,,,,,,,,,,,{,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,new 行动((),=祝辞,{,Demo.GetInstance ();,}) .BeginInvoke(空,空); ,,,,,,,,,,,,,,,} ,,,,,,,,,,,,,,,Console.Read ();
输出:
这样调试单例模式的时候就可以复现未加锁的错误了,也解决了我心头的疑问,找到了解决的循环中多线程创建实例的方法。
看完了这篇文章,相信你对“c #中多线程如何创建对象”有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!