private static void MultiThreadingEx() { Thread t1 = new Thread( new ThreadStart(() => { for (int i = 0; i < 3; i++) { SingletonA.GetInstance(); Console.WriteLine("H1: " + SingletonA.Mensaje); //Thread.Sleep(1000); var instanciasinglemth1 = SingletonLazy.Instance; //Console.WriteLine("H1: " + SingletonLazy.Mensaje); //Thread.Sleep(1000); } })); Thread t2 = new Thread( new ThreadStart(() => { for (int i = 0; i < 3; i++) { SingletonA.GetInstance(); Console.WriteLine("H2: " + SingletonA.Mensaje); //Thread.Sleep(1000); var instanciasinglemth1 = SingletonLazy.Instance; //Console.WriteLine("H2: " + SingletonLazy.Mensaje); // Thread.Sleep(1000); } })); t1.Start(); t2.Start(); }
public void Test_Inherence_OfChildrens_ChildrensAre_Not_TheSame() { SingletonA <SingletonB> firstSon = SingletonB.Instance; SingletonA <SingletonB> secondSon = SingletonB.Instance; SingletonA <SingletonC> firstDaughter = SingletonC.Instance; SingletonA <SingletonC> secondDaughter = SingletonC.Instance; Assert.AreNotSame(firstSon, firstDaughter); }
public void Test_Inherence_Of_Childrens() { SingletonA <SingletonB> firstSon = SingletonB.Instance; SingletonA <SingletonB> secondSon = SingletonB.Instance; SingletonA <SingletonC> firstDaughter = SingletonC.Instance; SingletonA <SingletonC> secondDaughter = SingletonC.Instance; Assert.AreSame(firstSon, secondSon); Assert.AreSame(firstDaughter, secondDaughter); }
public static SingletonA GetInstance() { if (_instancia == null) { _instancia = new SingletonA(); Mensaje = "Se ha creado una instancia de SA."; } else { Mensaje = string.Empty; } return(_instancia); }
public static SingletonA GetSingletonA() { if (singletonA == null) { lock (_object) { if (singletonA == null) { singletonA = new SingletonA(); } } } return(singletonA); }
public void Test() { /// 使用传统Singleton方式访问,一样可以保证唯一性 SingletonA sa1 = SingletonA.Instance; SingletonA sa2 = SingletonA.Instance; Assert.AreEqual <int>(sa1.GetHashCode(), sa2.GetHashCode()); /// 也可以绕过Instance静态属性,直接实例化那些准Singleton类型 SingletonA sa3 = new SingletonA(); Assert.IsNotNull(sa3); Assert.AreNotEqual <int>(sa1.GetHashCode(), sa3.GetHashCode()); }
static void Main(string[] args) { //三次打印相同的hashcode 使用的同一个实例 for (int i = 0; i < 3; i++) { //饿汉 SingletonA singletonA = SingletonA.GetInstance(); singletonA.PrintMsg(); } //三次打印相同的hashcode 使用的同一个实例 for (int i = 0; i < 3; i++) { //懒汉 SingletonB singletonB = SingletonB.GetInstance(); singletonB.PrintMsg(); } Console.ReadKey(); }