标签:
/// <summary> /// 设计模式 Singleton /// 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 /// 适用:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。 /// 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 /// </summary> /// <typeparam name="T"></typeparam> //关键字where表示对泛型T的约束: T 继承自class 关键字new指明了创建T的实例的时候应该使用的构造函数 public class Singleton<T> where T : class, new() { //关键字default 返回T的默认值,引用类型返回null private static T _instance = default(T); private static readonly object _synclock = new object(); public static T Instance { get { //当同时有2个线程调用这个方法时,会同时通过此判断 if (_instance == null) { //锁(Lock)是确保当一个线程位于代码的临界区时,另一个线程不能进入该临界区, //如果其他线程试图进入锁定的代码,则他将一直等待(即被阻止),直到该对象被释放【MSDN】。 lock (_synclock) { //第一个线程创建实例后,另外一个线程才能创建实例。 if (_instance == null) { _instance = new T(); } } } return _instance; } } }
标签:
原文地址:http://www.cnblogs.com/microps/p/4893082.html