您的位置:首页 > 健康 > 美食 > ui设计专业是什么_建筑业大数据服务平台官网_seo标题优化分析范文_seodao cn

ui设计专业是什么_建筑业大数据服务平台官网_seo标题优化分析范文_seodao cn

2024/12/23 7:28:56 来源:https://blog.csdn.net/WangMing_X/article/details/144401023  浏览:    关键词:ui设计专业是什么_建筑业大数据服务平台官网_seo标题优化分析范文_seodao cn
ui设计专业是什么_建筑业大数据服务平台官网_seo标题优化分析范文_seodao cn

一、单例模式介绍

  单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这个模式在需要一个对象被共享且全局唯一的情况下非常有用,比如配置对象、日志对象、数据库连接对象等。

单例模式的主要作用包括:

  1. 提供全局唯一的访问点,方便代码调用和管理。
  2. 避免不必要的内存开销和资源浪费,因为只有一个实例存在。
  3. 提高代码的可维护性和可扩展性,因为修改单例对象的行为非常方便。

然而,单例模式也存在一些缺点,如可能导致职责过多线程安全问题测试困难等。因此,在使用单例模式时需要谨慎考虑其适用场景和潜在问题。

 二、单例模式代码实现

  在C#中,单例模式的实现方法有多种,常见的包括:

1. 饿汉式 (Eager Initialization)

  饿汉式在类加载时就创建实例,线程安全但可能浪费资源(如果实例从未被使用)。

public sealed class SingletonEager
{private static readonly SingletonEager _instance = new SingletonEager();// 私有构造函数防止外部实例化private SingletonEager(){}//其他类通过SingletonEager.Instance来调用这个类的唯一实例public static SingletonEager Instance{get { return _instance; }}// 其他方法和属性...
}

2. 懒汉式 (Lazy Initialization)

  懒汉式在第一次使用时才创建实例,但需要注意线程安全问题。这里为了预防线程安全,加了一个lock。在多线程调用这个类的单例时,先得到lock的线程调用实例时,其他线程会等待。

public class SingletonLazy
{// volatile确保当instance变量被初始化成Instance时,多个线程能够正确处理instance变量private static volatile SingletonLazy _instance;// 锁定对象private static readonly object _lock = new object();// 私有构造函数防止外部实例化private SingletonLazy(){}public static SingletonLazy Instance{get{lock (_lock) // 加锁{if (_instance == null) {_instance = new SingletonLazy();}}return _instance;}}// 其他方法和属性...
}

3. 双重检查锁定 (Double-Checked Locking with volatile)

 判断两次if (_instance == null) ,在几十几百个线程都使用这个实例时就不用排队等待锁了,避免了线程堵塞。并且使用了volatile关键字以避免指令重排序问题。

public class SingletonDoubleChecked
{// 使用volatile确保多线程正确处理instance的可见性private static volatile SingletonDoubleChecked _instance;// 锁定对象private static readonly object _lock = new object();// 私有构造函数防止外部实例化private SingletonDoubleChecked(){}public static SingletonDoubleChecked Instance{get{if (_instance == null) // 第一次检查{lock (_lock) // 加锁{if (_instance == null) // 第二次检查{_instance = new SingletonDoubleChecked();}}}return _instance;}}// 其他方法和属性...
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com