zoukankan      html  css  js  c++  java
  • 单例的两种模式

    单例模式分为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;
                }
            }
        }
    
  • 相关阅读:
    python2.7升python3.2
    SQL-基础学习使用的数据库资料
    SQL-基础学习2--ORDER BY ,DESC,WHERE, BETWEEN,AND ,OR ,IN ,NOT
    SQL-基础学习1--SELECT,LIMIT,DISTINCT,注释
    Python之Django-part 1
    python--文本处理1
    EXTJS4.2——8.Form+gride+linq进行前后端传输
    LINQ的实例
    高级委托使用
    C# 委托
  • 原文地址:https://www.cnblogs.com/linjiancun/p/2068420.html
Copyright © 2011-2022 走看看