Singleton学习笔记
来源:互联网 发布:线切割锥度编程 编辑:程序博客网 时间:2024/05/01 06:55
单例模式的类图还是比较简单,自己管理自己的实例,看一下类图
用到的单例的地方还是比较多的,比如在手机游戏开发中,背景音乐的管理就可以设置成一个单例,只要设置成为静音,不管在游戏中如何切换都是静音的
单例模式的三个基本要素是:私有构造器+私有静态成员变量+全局静态方法
而传统的延迟加载在多线程的应用中很容易出现问题,会产生多个对象,造成一些莫名其妙的问题,传统的延迟加载的代码如下:
// 1、创建一个全局的静态常量引用private static MusicPlayer uniqueInstance;// 2、私有化构造方法private MusicPlayer() {}// 3、创建取得取得单例对象的方法// 3-1、非线程安全取得对象的方法(延迟加载)public static MusicPlayer getInstance() {if (uniqueInstance == null) {uniqueInstance = new MusicPlayer();}return uniqueInstance;}
而解决线程完全的方法有三种:
1、方法加同步:
// 3-2、通过synchronized同步保证线程安全,但效率会下降很多public synchronized static MusicPlayer getInstance() {if (uniqueInstance == null) {uniqueInstance = new MusicPlayer();}return uniqueInstance;}
2、采用积极加载的方式:
// 3-3、通过积极加载在JVM加载这个类是马上创建一个单件实例private static MusicPlayer uniqueInstance = new MusicPlayer();public static MusicPlayer getInstance() {if (uniqueInstance == null) {uniqueInstance = new MusicPlayer();}return uniqueInstance;}
3、双重加锁检测:
// 3-4、双重检测加锁(Jdk版本要求5+)private volatile static MusicPlayer uniqueInstance;public static MusicPlayer getInstance() {if (uniqueInstance == null) {synchronized (MusicPlayer.class) {if (uniqueInstance == null) {uniqueInstance = new MusicPlayer();}}}return uniqueInstance;}
总地来说单例模式还是比较简单的,要注意一点的是产生单例模式的方法要处理一下,适应多线程的情况。
- Singleton学习笔记
- Singleton模式学习笔记
- 设计模式学习笔记-Singleton
- Singleton -- Effective Java学习笔记
- Dagger2学习笔记之Singleton
- Singleton - Design Patterns学习笔记(1)
- 设计模式学习笔记-(1)Singleton模式
- 设计模式学习笔记之Singleton模式
- 大卫的Design Patterns学习笔记05:Singleton
- 设计模式学习笔记5:Singleton模式及其Delphi实现
- 《Java与模式》学习笔记(5)——Singleton
- 设计模式学习笔记(一)——Singleton
- 阿Sam的设计模式学习笔记----Singleton模式
- 学习笔记[1]——Singleton(单件)模式
- Multithreaded singleton - Design Patterns 学习笔记(5)
- 大卫的DESIGN PATTERNS学习笔记05:SINGLETON
- 设计模式学习笔记二(Singleton单件模式)
- 设计模式学习笔记(九)—Singleton模式
- Ubuntu使用
- 新来的
- IT 人
- 【经验总结】Bash Pitfalls(原创翻译)
- Linux 下监测指定路径下指定时间间隔内是否有指定的文件的生成
- Singleton学习笔记
- 第一篇blog
- 9-6课堂笔记
- 学习《Java核心技术卷1:基础知识》中对象与类一章中遇到的问题
- HDU 3944
- MFC Windows程序设计(第二版)第一章笔记
- Android定位功能(二)
- NYoj 103 大数相加
- Gamebryo3.0SDK翻译-Lightspeed介绍