Program.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. namespace SingletonPattern
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. Console.WriteLine("单例模式:");
  15. TestStaticSingleton();
  16. TestLasyInitialSingleton();
  17. TestDoubleLockSingleton();
  18. }
  19. private static void TestStaticSingleton()
  20. {
  21. Console.WriteLine("静态变量初始化实例");
  22. Singleton1 singleton1 = Singleton1.Instance();
  23. singleton1.GetInfo();
  24. Console.ReadLine();
  25. }
  26. private static void TestLasyInitialSingleton()
  27. {
  28. Console.WriteLine("延迟初始化实例");
  29. Singleton2 singleton2 = Singleton2.Instance();
  30. singleton2.GetInfo();
  31. singleton2.Reset();
  32. Console.ReadLine();
  33. }
  34. private static void TestDoubleLockSingleton()
  35. {
  36. Console.WriteLine("锁机制确保多线程只产生一个实例");
  37. for (int i = 0; i < 8; i++)
  38. {
  39. Thread thread=new Thread(ExecuteInForeground);
  40. thread.Start();
  41. }
  42. }
  43. private static void ExecuteInForeground()
  44. {
  45. Console.WriteLine("Thread {0}: {1}, Priority {2}",
  46. Thread.CurrentThread.ManagedThreadId,
  47. Thread.CurrentThread.ThreadState,
  48. Thread.CurrentThread.Priority);
  49. Singleton3 singleton3 =Singleton3.Instance();
  50. singleton3.GetInfo();
  51. Console.WriteLine(singleton3.GetHashCode());
  52. }
  53. }
  54. }