扩大
缩小

单例

复制代码
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace CLibrary.ConsoleApp.Core
 8 {
 9     /// <summary>       
10     /// 饿汉模式(推荐使用):在类创建时已经将实例加载到内存,天生线程安全,第一次调用比较快。
11     /// </summary>
12     /// <typeparam name="T"></typeparam>
13     public class Singleton_EHan<T> where T : class, new()
14     {
15         //饿汉式是线程安全的,因为虚拟机保证只会装载一次,在装载类的时候是不会发生并发的。
16         private static readonly T _instance = new T();
17         public static T Current { get { return _instance; } }
18     }
19 
20     /// <summary>
21     /// 懒汉模式:双重锁保证线程安全,第一次调用较慢。
22     /// </summary>
23     /// <typeparam name="T"></typeparam>
24     public class Singleton_LanHan<T> where T : class, new()
25     {
26         private static readonly object sycLock = new object();
27         //不允许线程进行本地缓存,每个线程的读写都是直接操作在共享内存上,这就保证了变量始终具有一致性。缺点很明显:牺牲了效率,
28         //但是多核CPU情况下线程不安全。
29         private static volatile T _instance;
30         public static T Current
31         {
32             get
33             {
34                 if (_instance == null)
35                 {
36                     lock (sycLock)
37                     {
38                         if (_instance == null)
39                         {
40                             _instance = new T();
41                         }
42                     }
43                 }
44                 return _instance;
45             }
46         }
47     }
48 }
复制代码

 

posted on   禅道  阅读(166)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示