static void MultiThreadDemo() { Task <ThreadSafe_1> task1 = new Task <ThreadSafe_1>(Thread1); Task <ThreadSafe_1> task2 = new Task <ThreadSafe_1>(Thread2); task1.Start(); task2.Start(); Console.WriteLine($"Only one instance: {task1.Result == task2.Result}"); Console.WriteLine($"---------------"); Parallel.Invoke(() => Thread3(), () => Thread4()); ThreadSafe_1 Thread1() { ThreadSafe_1 singleton = ThreadSafe_1.Instance; singleton.Name = "t1"; singleton.Age = 20; Console.WriteLine($"-- Name:{singleton.Name}, Age: {singleton.Age}"); return(singleton); } ThreadSafe_1 Thread2() { ThreadSafe_1 singleton = ThreadSafe_1.Instance; singleton.Name = "t2"; Console.WriteLine($"-- Name:{singleton.Name}, Age: {singleton.Age}"); return(singleton); } void Thread3() { ThreadSafe_2 singleton = ThreadSafe_2.Instance; singleton.Name = "t3"; singleton.Age = 20; Console.WriteLine($"-- Name:{singleton.Name}, Age: {singleton.Age}"); } void Thread4() { ThreadSafe_2 singleton = ThreadSafe_2.Instance; singleton.Name = "t4"; Console.WriteLine($"-- Name:{singleton.Name}, Age: {singleton.Age}"); } }
static void SingleThreadDemo() { ThreadUnsafe singleton1 = ThreadUnsafe.Instance; singleton1.Name = "sunny"; singleton1.Age = 20; ThreadUnsafe singleton2 = ThreadUnsafe.Instance; Console.WriteLine($"Name:{singleton1.Name}, Age: {singleton2.Age}"); Console.WriteLine($"Only one instance: {singleton1 == singleton2}"); ThreadSafe_1 threadSafe_1 = ThreadSafe_1.Instance; threadSafe_1.Name = "sunny"; threadSafe_1.Age = 20; ThreadSafe_1 threadSafe_2 = ThreadSafe_1.Instance; Console.WriteLine($"Name:{threadSafe_1.Name}, Age: {threadSafe_2.Age}"); Console.WriteLine($"Only one instance: {threadSafe_1 == threadSafe_2}"); }