单例模式

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace DesignPattern.CreationalPatern
 8 {
 9     //定义 1.只能创建一个实例 2.提供一个全局访问
10 
11     public class SingletonPattern
12     {
13         private static SingletonPattern _singletonMode = null;
14         private static readonly object _objLock = new object();
15         private SingletonPattern() { }
16 
17         //双重锁定,防止多线程的资源浪费
18         public static SingletonPattern Instance() 
19         {
20             //判断是否已有实例,避免重复执行加锁操作,会消耗CPU资源,涉及到线程上线文切换
21             if (_singletonMode != null)
22             {
23                 //混合状态锁,锁对象一定要是用引用类型,因引用类型包含两个指针,TypeHandler和同步块索引(指向同步块实际意义上的锁)
24                 //锁对象不能使用字符串,字符串具有驻留性,可能多个AppDomin都会用到
25                 lock (_objLock)
26                 {
27                     if (_singletonMode != null)
28                     {
29                         _singletonMode = new SingletonPattern();
30                     }
31                 }
32             }
33 
34             return _singletonMode;
35         }
36     }
37 }
38  

 

单例模式

上一篇:java8中的时间日期


下一篇:Spring Boot中使用@RequestBody对json解析时,LocalDateTime反序列化失败