C#单例模式

网友投稿 768 2022-08-31

C#单例模式

C#单例模式

#region 单线程 单例 public class Singleton { private static Singleton uniqueInstance; //定义私有构造函数,外界不能创建该实例 private Singleton() { } //定义一个公有方法,提供一个全局访问点 public static Singleton GetInstance() { if (uniqueInstance == null) uniqueInstance = new Singleton(); return uniqueInstance; } } #endregion #region 多线程单例 public class Singleton { // 定义一个静态变量来保存类的实例 private static Singleton uniqueInstance; //定义一个标识,确保线程同步 private static readonly object locker = new object(); // 定义私有构造函数,使外界不能创建该类实例 private Singleton() { } //定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点 public static Singleton GetInstance() { // 当第一个线程运行到这里时,此时会对locker对象 "加锁", // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁 // lock语句运行完之后(即线程运行完之后)会对该对象"解锁" lock (locker) { // 如果类的实例不存在则创建,否则直接返回 if (uniqueInstance == null) { uniqueInstance = new Singleton(); } } return uniqueInstance; } } #endregion #region 双重锁定单例模式 public class Singleton { // 定义一个静态变量来保存类的实例 private static Singleton uniqueInstance; //定义一个标识确保线程同步 private static readonly object locker = new object(); // 定义私有构造函数,使外界不能创建该类实例 private Singleton() { } //定义公有方法提供一个全局访问点,同时你也可以定义公有属性来提供全局访问点 public static Singleton GetInstance() { // 当第一个线程运行到这里时,此时会对locker对象 "加锁", // 当第二个线程运行该方法时,首先检测到locker对象为"加锁"状态,该线程就会挂起等待第一个线程解锁 // lock语句运行完之后(即线程运行完之后)会对该对象"解锁" // 双重锁定只需要一句判断就可以了 if (uniqueInstance == null) { lock (locker) { // 如果类的实例不存在则创建,否则直接返回 if (uniqueInstance == null) uniqueInstance = new Singleton(); } } return uniqueInstance; } } #endregion

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于go语言中gc的初步研究(gcam go)
下一篇:Go语言爱好者周刊:第 5 期(go语言论坛)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~