zoukankan      html  css  js  c++  java
  • [设计模式]之单例模式

    单例模式
    定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

     通常我们可以让一个全局变量使得一个对象被访问,但是不能防止你实例化多个对象,一个最好的办法就是:让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法


    单例模式除了可以保证唯一实例外,还可以:
    单例模式一位Singleton类封装它的唯一实例,还可以严格地控制客户怎样访问它以及何时访问它。简单的说就是对唯一实例的受控访问。

    多线程时的单例

    在多线程程序中,多个线程同时,注意要是同时访问Singleton类,调用GetInstance方法,会可能造成创建多个实例

    这里就需要把临界区的代码给锁起来,保证只有一个线程在临界区之中,如果其他线程试图进入锁定代码,则它将一直等待,直到该对象被释放


     双重锁定

    为了不让线程每次都加锁,而只在实力未创建的时候在加锁处理

    静态初始化

    C#与公共语言运行库也提供了一种“静态初始化”方法,这种方法不需要开发人员显示的编写线程安全代码,既可以解决多线程下它是不安全的问题。

    总结:静态初始化的方式是在自己被加载时就将自己实例化了,所以被形象的称之为饿汉单例模式
           原先的模式是要在第一次被引用时,才会讲自己实例化,所以被形象的称之为懒汉单例模式
    饿汉单例模式:一加载就实例化对象,所以要提前占用系统资源。以空间换取时间
    懒汉单例模式:面临着多线程访问的安全性问题,需要做双重锁定这样的处理才可以保证安全,以时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间从C#语言来讲,饿汉单例模式已经足够满足我们的需求了。



  • 相关阅读:
    ffmpeg rtmp推流 视频转码
    java日志发展史 log4j slf4j log4j2 jul jcl 日志和各种桥接包的关系
    nginx stream 流转发,可以转发rtmp、mysql访问流,转发rtmp、jdbc请求
    java web http 转https 通过nginx代理访问
    linux 服务器磁盘挂载
    novnc 通过websockify代理 配置多点访问
    linux 文件服务 minio 安装部署配置
    AOP实现原理,手写aop
    java 泛型
    JAVA反射getGenericSuperclass()用法
  • 原文地址:https://www.cnblogs.com/hailiang2013/p/2846419.html
Copyright © 2011-2022 走看看