• 单例模式实现 Volitile , interlocked


     1         //单例模式:
     2         //1. 双检锁机制   Volatile.write()
     3         //2. 静态变量
     4         //3. Interlocked.CompareExchange(ref single, temp, null); 模式
     5 
     6         private static Singleton single = null;
     7         private Singleton()
     8         {
     9         }
    10 
    11         public static Singleton GetSingleton()
    12         {
    13             if (single != null)
    14             {
    15                 return single;
    16             }
    17             //多个线程可以创建对象,但是只有一个线程创建的能被赋值,其他的成为垃圾回收对象
    18             Singleton temp = new Singleton();
    19             //线程竞态,只有一个线程可以执行
    20             Interlocked.CompareExchange(ref single, temp, null);
    21             return single;
    22         }
            private static Singleton2 instance = null;
            private static object _lock = new object();
    
            public static Singleton2 GetSingleton()
            {
                if (instance != null)
                {
                    return instance;
                }
    
                Monitor.Enter(_lock);
                if(instance==null)
                {
                    Singleton2 temp = new Singleton2();
                    //保证构造器在写入之前执行
                    Volatile.Write(ref instance,temp);
                }
                Monitor.Exit(_lock);
                return instance;
            }
  • 相关阅读:
    hdu 4297 One and One Story 夜
    hdu 4280 Island Transport 夜
    1389. Roadworks 夜
    hdu 4289 Control 夜
    hdu 4291 A Short problem 夜
    hdu 4284 Travel 夜
    1080. Map Coloring 夜
    正则中的转义符\
    起重复出现作用的量词*和+
    安卓的权限大全和动态使用安卓权限
  • 原文地址:https://www.cnblogs.com/yougmi/p/6526150.html
Copyright © 2020-2023  润新知