c# 单例模式学习(学习记录)

        简单的意思就是一个类只能有一个实例,并且提供一个全局的访问点。

        写法为:先创建一个类,定义一个类的静态变量,然后私有化构造器。提供一个公有方法进行访问以实现一个类只能有一个实例的情况

示例:

public class SingText{

private static SingText text;//定义静态变量

private SingText(){}//私有化构造器

public static SingText getSingText(){//提供一个公有方法进行类访问

    If(text == null){//保证是否已经进行实例
         text = new SingText();
     }
        Return text ;
  }
}

        但是如果当遇到多线程时,同时进入该方法可能会出现text都为空,进行重复实例化的情况发生,这是就需要一个标识保证该情况不会发生,在使用锁来防止重复实例的时候需要注意如果一个线程已经进入实例化了,但是有其他线程刚进入,这时候线程的锁就会导致多个线程等在外面直到锁开才能进去判断,所以这个时候进来后可以先判断是否已经实例化。可以减少锁等待时间

示例:

Public class SingText{

Private static SingText text;//定义静态变量

private static readonly object locker = new object();

Private SingText(){}//私有化构造器

Public static SingText getSingText(){//提供一个公有方法进行类访问
    if(text  == null){//进行双层判断,防止下面线程已经创建后其他线程还要等锁开在进去判断
        Lock(locker){
            If(text == null){//保证是否已经进行实例
                text = new SingText();
            }
        }
    }
      Return text;
  }
}

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值