设计模式之单例模式
来源:互联网 发布:origin多组数据作图 编辑:程序博客网 时间:2024/06/06 02:23
1. 单例模式概述
单例模式用于创建一个实例的场景,例如线程池、常量池,Spring上下文等等
2. 单例模式关键点
- 构造函数私有
- 声明静态成员变量存储实例
- 对外提供获取实例的方法
3. 最简单的单例模式
public class SimpleSingleton{ private SimpleSingleton(){}//私有构造函数 private static SimpleSingleton instance = new SimpleSingleton(); public static SimpleSingleton getInstance(){ return instance; } }
这种方式实现的单例是线程安全的,当有多个线程去调用getInstance()方法时,不会创建多个对象,因为JVM在加载该类时,对于static修饰的静态属性,只能由一个线程执行,且只执行1次。
但是在分布式系统中,每台服务器都有一个JVM,该方式不适用。
最简单的方式实现在类加载时就初始化实例,若想要实现在调用时初始化实例,则可以使用Double-check locking的方式实现。
4. 延迟创建的单例
public class Singleton{ private Singleton(){} private volatile static Singleton instance = null; public static Singleton getInstance(){ if(instance == null){ synchronized(Singleton.class){ if(instance == null){ instance = new Singleton(); } } } return instance; }}
之所以判断两次,是因为ThreadA和ThreadB同时调用该方法时,都判断为空,在等待进入同步代码块,如果ThreadA先进入,实例化了一个对象,在同步代码块中不再次判断的话,ThreadB也将创建一个对象。
成员变量使用volatile关键字修饰,表示在ThreadA实例化对象后,其他线程能够自动发现instance变量的最新值。
对于分布式系统中实现单例待补充。
不知道参考了许多人家的博客写出的东西是转载还是原创,那就先设成转载吧!好好写每一篇博客。
0 0
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例设计模式 标签: 设计模式
- 设计模式之单例
- 设计模式之单例
- 设计模式之 单例
- laravel安装和设置流程
- poj 2117
- Leetcode026--搜索矩阵
- JVM内存管理机制和垃圾回收机制
- Installing Imagick for PHP 7 on Windows 10
- 设计模式之单例模式
- 数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)
- MVC(三、Razor视图引擎)
- iperf测试网络吞量
- ue4-HUD绘制UI(C++)
- CGContextAddArcToPoint和CGContextAddArc
- GraphQL : 比restful 更加灵活的 数据查询框架
- android JobService相关源码分析
- 中国省市区县行政编码处理(转存在到数据库)