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

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

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


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

    多线程时的单例

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

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


     双重锁定

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

    静态初始化

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

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



  • 相关阅读:
    《Java编程思想》学习笔记(一)
    SpringJDBC中jdbcTemplate 的使用
    JAVA数据库连接池C3p0 以及阿里Druid提供的连接池
    SpringJDBC :jdbcTemplate在连接是出现 org/springframeworkbc/core/JdbcTemplate : Unsupported major.minor version 52.0 异常解决
    JDBC事物的处理
    jdbc连接模拟用户登陆密码判断
    Java读取.properties配置文件并连接数据库
    JDBC的基本概念
    MySql数据库常用语句汇总
    JDBC连接各种数据库的方法,连接MySql,Oracle数据库
  • 原文地址:https://www.cnblogs.com/hailiang2013/p/2846419.html
Copyright © 2011-2022 走看看