单例的两种模式

单例模式分为2种:

 一种是饿汉模式:自己主动实例化。

public sealed class 单例
{
private 单例()
{

}

static readonly 单例 instance = new 单例();
public static 单例 Instance
{
get
{
return instance;
}
}


}

通常这种方式readonly跟static一起使用,它的初始化交由静态字段实现,并可以在运行时编译。(静态变量直接在后面赋值,编译成IL之后是在和在静态构造函数里面实例化是一样的.因此也可以写到stati 单例(){}里) 这种模式我们无需自己解决线程安全性问题。CLR会给我们解决。

二种是懒汉模式:

  使用了双重锁方式较好地解决了多线程下的单例模式实现。先看内层的if语句块,使用这个语句块时,先进行加锁操作,保证只有一个线程可以访问该语句块,进而保证只创建了一个实例。再看外层的if语句块,这使得每个线程欲获取实例时不必每次都得加锁,因为只有实例为空时(即需要创建一个实例),才需加锁创建,若果已存在一个实例,就直接返回该实例,节省了性能开销。

    public class 单例1
    {
        static  单例1 instance;
        static object objhelp = new object();
        public static 单例1 Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (objhelp)
                    {
                        if(instance==null)
                        instance = new 单例1();
                    }
                }
                return instance;
            }
        }
    }
posted @ 2011-07-08 15:01  二锅头  阅读(381)  评论(0)    收藏  举报