单例的两种模式

单例模式分为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;

            }

        }

    }

你可能感兴趣的:(单例)