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

    设计模式是前辈们对代码日积月累的总结,形成的一种良好的编程思想和技巧。

           单例模式,使用非常广泛,本篇将介绍三种常用的单例模式的实践:类加载时初始化类对象(也叫饿汉模式)、延迟加载初次调用时初始化类对象(也叫饱汉模式)、双重检查机制。

           一、类加载时初始化类对象(也叫饿汉模式):首先构造函数要使用private修改,外部类无法通过new创建类对象;其次定义一个private static类型的类对象并实例化;最后通过public static修改的方法获取类加载时创建的类对象。如果说这个类一次都没使用过,那么初始化操作就是无畏的多余操作。

           二、延迟加载初次调用时初始化类对象(也叫饱汉模式):首先构造函数要使用private修改,外部类无法通过new创建类对象;其次定义一个private static类型的类对象,并不初始化;最后通过public static synchronized修改的方法获取类实例,方法体内,如果类对象为null就创建一个,最终返回。由于使用了synchronized同步关键字,因此同一时刻只有一个线程能获取类实例,性能稍微有影响。

           三、双重检查机制:首先构造函数要使用private修改,外部类无法通过new创建类对象;其次定义一个private static volatile类型的类对象,并不初始化;最后通过public static修改的方法获取类实例,方法体内,会有两次类实例的检查,在第一次检查的内部,使用synchronized同步关键字加锁,这样就保证了最终实例化的时候,只有一个线程创建了对象。由于类对象是用volatile修饰的,因此类对象创建之后会立马更新到主内存,并清空各个线程该对象的副本,强制各个线程重新从主内存获取新的值。从而保证了类对象最终只初始化了一次,而且是延迟加载。推荐使用这种方式创建单例。

           提示:推荐使用双重检查机制,创建单例。

           volatile关键字的作用:对volatile修饰的变量的修改,会立马更新到主内存;将其他线程volatile修饰的变量的副本清空,强制各个线程重新从主内存中获取新的值。

  • 相关阅读:
    2015年终总结
    拉格朗日插值编程实现
    dlib库使用
    semi-global matching 算法总结
    为什么有的程序在64位机上跑反而比32位机更慢
    编译并使用带有OpenCL模块的OpenCV for android SDK
    Android OpenGL ES 离屏渲染(offscreen render)
    Django的安装和项目的启动
    实现单例模式的几种方法
    基本数据结构----队列
  • 原文地址:https://www.cnblogs.com/dushenzi/p/9369088.html
Copyright © 2011-2022 走看看