设计模式笔记-单例模式
来源:互联网 发布:网络用语lay了什么意思 编辑:程序博客网 时间:2024/06/05 00:47
单例模式主要分两种:饿汉模式和懒汉模式。
饿汉模式例子:
懒汉模式例子:
饿汉模式和懒汉模式的区别在于单例加载的时间不同,对于饿汉模式来说,线程是安全的,对于懒汉模式,则是不安全的。
为了实现线程安全,可以再懒汉模式的getInstance加上同步约束synchronized.但是如果这样的话,每次取一个实例都需要进去同步机制,那并发线程多的时候,速度显然收影响。
所以有个双检测锁机制的懒汉模式。
双检测锁机制的懒汉模式例子:
饿汉模式例子:
public class HungrySingle { private static HungrySingle single = new HungrySingle(); private HungrySingle() { } public static HungrySingle getInstance() { return single ; } public static void main(String[] args) { HungrySingle single = getInstance (); }}
懒汉模式例子:
public class LazySingle { public static LazySingle single = null; private LazySingle() { } public static LazySingle getInstance() { if (single == null) { single = new LazySingle(); } return single ; } public static void main(String[] args) { LazySingle single = getInstance (); }}
饿汉模式和懒汉模式的区别在于单例加载的时间不同,对于饿汉模式来说,线程是安全的,对于懒汉模式,则是不安全的。
为了实现线程安全,可以再懒汉模式的getInstance加上同步约束synchronized.但是如果这样的话,每次取一个实例都需要进去同步机制,那并发线程多的时候,速度显然收影响。
所以有个双检测锁机制的懒汉模式。
双检测锁机制的懒汉模式例子:
public class DoubleLockLazySingle { public static DoubleLockLazySingle single = null; private DoubleLockLazySingle () { } public static DoubleLockLazySingle getInstance() { if (single == null) { synchronized(DoubleLockLazySingle.class) { if (single == null) { single = new DoubleLockLazySingle(); } } } return single; } public static void main(String[] args) { DoubleLockLazySingle single = getInstance (); }}
双检测锁机制可以实现lazey loading,又可以实现线程同步,应该算是比较好的单例模式。
单例模式应用在log4j,数据库连接池等。
0 0
- 单例设计模式笔记
- 单例设计模式笔记
- 《大话设计模式》--笔记(单例模式)
- 设计模式--单例模式【自学笔记】
- 【笔记】设计模式 - 1 单例模式
- 设计模式笔记之---单例模式
- 设计模式学习笔记:单例模式
- 设计模式学习笔记-单例模式
- 设计模式笔记之单例模式
- php设计模式笔记:单例模式
- 设计模式笔记-单例模式
- 设计模式 笔记 单例模式 Singleton
- 设计模式学习笔记--单例模式
- 设计模式学习笔记-单例模式
- 设计模式笔记--单例模式
- 设计模式学习笔记-单例模式
- 设计模式笔记:单例模式
- 设计模式笔记-单例模式
- 2014年传智Itcast C++培训3期视频全套
- 给大家说明。OGG 的最新版本Version 11.2.1.0.25 BLR 19358139– 1 September 2014
- 《春望》 杜甫
- 给大家说明。Oracle修改ip或主机名后重建em和监听
- Iptables强制访问外部站点
- 设计模式笔记-单例模式
- 给大家说明。也议MySQL中隐式转换
- 输入模块中该注意的知识点:
- 快速排序改进算法
- hdu 5001 walk
- hdu-1016 Prime Ring Problem
- 给大家说明。升级数据字典,解决ORA-01092: ORACLE instance terminated. Disconnection forced问题
- 写在Linux学习前
- word2003 /2007 添加无格式粘贴快捷键