简单的意思就是一个类只能有一个实例,并且提供一个全局的访问点。
写法为:先创建一个类,定义一个类的静态变量,然后私有化构造器。提供一个公有方法进行访问以实现一个类只能有一个实例的情况
示例:
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;
}
}