单例模式 ---懒汉-饿汉--线程安全懒汉

单例模式 

C#中单例模式主要用于实现一个对象只有一个实例,有懒汉饿汉两种实现方式。

   实现一个类只有一个实例解释:(同一个对象每new一次,会生成一个新的哈希Code、所以本质上它们不一样了,长此以往就会浪费资源,单例模式主为解决这个问题,保证数据一致性、节省资源) 

    

 

①懒汉实现方式是当引用实例的时候初始化,需要用两个if判断和加锁,来避免多线程的情况产生多个实例,优点是占用内存少,缺点是可能引发性能问题

②饿汉模式方式是直接实例化,优点是提前初始化,性能快,缺点是占用内存多(一开始就实例化,后面用不到白占用空间资源、浪费)

 

单例模式在C#的项目中使用的场景有: 配置文件加载、Session实现

懒汉

  当引用实例的时候实例化--什么时候用什么时候实例化

  //单线程情况

  

 

  

 

  //多线程情况

  

 

   //多线程情况的懒汉方式存在问题  --调用时候出现问题(因为有可能个别线程运行时间比较长,后面线程又运行过来,所以出现哈希code不一样的情况)

 

 

   解决:加锁--需要等上个线程运行后,后面的线程再运行(安全-保证用的是一个实例-但不完善)   

                                  

   

        当前加锁后的结果:

 

      

  又存在问题--不完善

  ----起锁耗费性能(上面那种情况会频繁起锁,来一个线程就要上一个锁)

    完善:双if加锁

         

 和上面结果一样,但是比他完善

 

 

饿汉

  声明时直接实例化

  ①声明时直接实例化                                         

    ②用的时候直接取的                 

   

  ③使用结果  

  

 

   

 

posted @ 2022-07-24 10:24  じ逐梦  阅读(139)  评论(0)    收藏  举报