单件模式-《Head First 设计模式》第五章
来源:互联网 发布:域名后缀排名 编辑:程序博客网 时间:2024/06/04 01:10
Singleton Pattern(单件模式)
只有一个类的模式
一、定义
确保一个类只有一个实例,并提供一个全局访问点。
二、有什么用?
适用于对象只要一个的情况,比如:线程池thread pool,cache,对话框,处理偏好设置,register(注册表)对象,日志对象,充当打印机、显卡等设备的驱动程序的对象。
三、优点
单件模式提供一个全局访问点,和全局变量一样方便,却没有全局变量的缺点:需要一开始创建,假如其很消耗资源,却一直用不到,就会造成性能损耗。
四、多线程
单纯的单件模式在多线程的时候,可能会出现多次实例化的问题。因此有三种方法解决多线程问题。
1、单纯同步
适合性能要求不高的地方。
/** * 单纯同步:不考虑性能 * */public class SingletonSyn { private static SingletonSyn uniqueInstance; public static synchronized SingletonSyn getInstance() { if(uniqueInstance == null) { uniqueInstance = new SingletonSyn(); } return uniqueInstance; } }
2、立即实例化
/** * 立即创建:非实例化延迟,能保证多线程同步问题。 * JVM保证任何线程访问uniqueInstance静态变量前,一定会创建此实例。 * */public class SingletonImmediately { private static SingletonImmediately uniqueInstance = new SingletonImmediately(); public static synchronized SingletonImmediately getInstance() { return uniqueInstance; } }
3、双重上锁
/** * 双重上锁同步(double-checked locking): 只有第一次会同步。 * 不适用于1.4以及更老版本java * */public class SingletonLockDouble { //volatile确保多线程正确处理uniqueInstance变量 private static volatile SingletonLockDouble uniqueInstance; public static synchronized SingletonLockDouble getInstance() { //检查实例,不存在就进入同步块 if(uniqueInstance == null) { //上锁 synchronized(SingletonLockDouble.class) { //不存在则创建 if(uniqueInstance == null) { uniqueInstance = new SingletonLockDouble(); } } } return uniqueInstance; } }
阅读全文
0 0
- 单件模式-《Head First 设计模式》第五章
- Head First设计模式C++实现--第五章:单件(Singleton)模式
- 《Head First 设计模式》单件模式
- Head First-设计模式:单件模式
- Head First设计模式 读书笔记-单件模式、命令模式
- Head First---单件模式
- Head First设计模式 C++实现-Singleton(单件模式)
- Head First设计模式笔记(6)---单件模式
- <Head First 设计模式>:单件模式:Singleton
- Head First 设计模式(5):单件模式
- head first 设计模式——(单件模式)
- 《Head first设计模式》学习笔记 - 单件模式
- 《Head first设计模式》学习笔记 – 单件模式
- 《Head first设计模式》学习笔记 – 单件模式
- Head First 设计模式(五)单件模式
- 【设计模式】《Head First 设计模式》读书笔记——单件模式
- Head First设计模式-单例模式
- 《Head First 设计模式》阅读笔记(五)——单件模式
- TLB
- Angular入门-问题速查
- 培训笔记
- Codeforces Round #442 (Div. 2) 题解
- Eclipse中导入的JS文件报错
- 单件模式-《Head First 设计模式》第五章
- 2017-11-13
- 《java核心技术卷一》第二章
- CTX学长的01串
- MySQL数据库:Access denied for user 'root'@'localhost' (using password:YES)解决方法
- 图片缩放工具
- nodejs 小结
- Qt之进程间通信(TCP/IP)
- 贪吃蛇