首页 > 其他 > 详细

设计模式之单例模式

时间:2018-07-26 00:18:02      阅读:224      评论:0      收藏:0      [点我收藏+]

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

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

       一、类加载时初始化类对象(也叫饿汉模式):首先构造函数要使用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修饰的变量的副本清空,强制各个线程重新从主内存中获取新的值。

设计模式之单例模式

原文:https://www.cnblogs.com/dushenzi/p/9369088.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!