• C#单例模式的2种实现方式,Lazy模式和双检锁模式


     1     public class MyClass
     2     {
     3         //volatile 关键字指示一个字段可以由多同时执行的线程修改。 声明为 volatile 的字段不受编译器优化(假定由单个线程访问)的限制。 这样可以确保该字段在任何时间呈现的都是最新的值。
     4         private static volatile MyClass _instance;
     5         private static readonly object InstanceLock = new object();
     6         public static MyClass Instance
     7         {
     8             get
     9             {
    10                 if (_instance == null)
    11                 {
    12                     lock (InstanceLock)
    13                     {
    14                         if (_instance != null)
    15                         {
    16                             return _instance;
    17                         }
    18                         _instance = new MyClass();
    19                     }
    20                 }
    21 
    22                 return _instance;
    23             }
    24         }
    25 
    26         //在.NET 中这种模式已用 Lazy<T>类实现了封装,内部就是使用了双检锁模式。 你最好还是使用 Lazy<T>,不要去实现自己的双检锁模式了。这样非常的简洁
    27         public static MyClass Instance2 = new Lazy<MyClass>(() => new MyClass()).Value;
    28     }
    29 
    30     class Program
    31     {
    32 
    33 
    34         static void Main(string[] args)
    35         {
    36             for (int i = 0; i < 10; i++)
    37             {
    38                 Thread th = new Thread(() => { Console.WriteLine("线程调用对象{0}", MyClass.Instance.GetHashCode()); });
    39                 th.Start();
    40             }
    41             for (int i = 0; i < 10; i++)
    42             {
    43                 Thread th = new Thread(() => { Console.WriteLine("线程调用对象{0}", MyClass.Instance2.GetHashCode()); });
    44                 th.Start();
    45             }
    46 
    47             Console.ReadLine();
    48         }
    49 
    50     }

    打印出的结果

  • 相关阅读:
    假期第六周总结
    假期第五周周总结
    navicat 链接oracle时出现的各种问题
    oracle 12如何解锁账户锁定状态及修改忘记的密码
    假期第四周周总结
    假期第三周周总结
    idea中使用git【推送,拉取,分支合并,解决冲突】
    Git分支,合并,切换分支的使用
    Git使用
    SpringCloud服务降级案列
  • 原文地址:https://www.cnblogs.com/zsx-blog/p/13792360.html
Copyright © 2020-2023  润新知