设计模式(二):单例模式
来源:互联网 发布:直播游戏的软件 编辑:程序博客网 时间:2024/04/30 02:49
单例模式:用来创建只能有一个实例的对象。确保一个类只有一个实例,并提供一个全局访问点。
有的时候我们不希望一个类被创建出多个对象,因为多个实例会带来许多不好的影响。
经典单例模式:
public class SingleInstance { private static SingleInstance instance; private SingleInstance(){} public static SingleInstance getInstance(){ if(instance == null){ instance = new SingleInstance(); } return instance; } ...........}
在类中定义静态变量记录类的唯一实例,然后定义一个私有的构造器,这样外部便无法实例化,再声明一个getInstance()方法实例化对象,并返回实例。
这样,当外部想实例化时,只需要调用SingleInstance.getInstance()方法便可获得唯一的实例。
但是上述经单例模式在处理多线程时还是会遇到错误,经常会被多个线程同时调用。
通过增加synchronized关键字到getInstnce()方法中,变成同步方法,就可以解决多线程问题。
但是同步方法会引发性能问题,每次都要同步这个方法,但事实上只要第一次同步即可。
所以最完善的办法便是采用 ”双重检查加锁“,在getInstance()方法中减少使用同步。
public class SingleInstance { private volatile static SingleInstance instance; private SingleInstance(){} public static SingleInstance getInstance(){ if(instance == null){ synchronized (SingleInstance.class) { if(instance == null){ instance = new SingleInstance(); } } } return instance; }}
private volatile static SingleInstance instance;
volatile关键词确保当instance变量被初始化成实例时,多个线程正确处理instance变量。
getInstance()方法只在第一次彻底执行全部代码。
0 0
- 模式设计(二)------单例模式
- 设计模式(二)--单例模式
- 设计模式(二)单例模式
- 设计模式(二):单例模式
- 设计模式(二)单例模式
- 设计模式(二)单例设计模式
- Java单例设计模式(二)
- 设计模式之二--- 单例模式
- C++设计模式[二]单例模式
- 【设计模式】二、单例模式
- 设计模式(二)-------->单例模式
- 设计模式之单例模式(二)
- 二、设计模式之一-----单例模式
- 【设计模式 二】单例模式
- c++设计模式二,单例模式
- 设计模式<二>单例模式
- 设计模式<二>单例模式
- 设计模式之(二)--单例模式(singleton)
- 设计倒计时
- 绿荫工作室爱选修app内测
- Android更改imagebutton为纯色方法
- 设计模式(一):设计模式入门
- oracle数据库新建监听解决连接速度非常慢问题
- 设计模式(二):单例模式
- Android Studio如何引用外部Library工程
- 【最小生成树】POJ 1287 Networking
- 利用dijkstra算法规划线路
- Oracle12C--权限管理(二十一)
- android 使用<merge>标签
- android 下载instagram动态中图片的demo
- hadoop学习记录(零)
- CFileDialog获取文件名长度