单例模式的双重检查成例的研究
来源:互联网 发布:js选项卡自动切换 编辑:程序博客网 时间:2024/06/01 21:53
1:问题的引入
1:仔细看下面的代码你会发现,同步化实际上只有在变量第一次被赋值之前才有用,在 变量有了值之后,同步化实际上变成另一个没有必要的瓶颈,会造成额外的开销,因此设计成了双重检查成例(这是一个反面教材,因为双重检查成例在Java编译器里无法实现)
2:双重检查成例的懒汉式单例模式
1:案例代码
2:案例代分析
1:因为行程A和B是第一批调用者,因此,当它们进入此静态工厂方法时,checkSingleton变量是null,因此,线程A和B会同时或几乎同时到达位置1
2:假设线程A会首先到达位置2,并进入synchronized(this)到达位置3,这是,由于synchronized(this)的同步化限制,线程B无法到达位置3,而只能在位置2等候.
3:线程A指向 语句,使得 变量得到一个值,即对一个 对象的引用,线程B只能继续在位置2等候
4:线程A退出synchronized(this),返回checkSingleton对象,退出静态工厂方法.
5:线程B进入synchronized(this)块,达到位置3,4.由于checkSingleton变量已经不是null了,因此线程B退出synchronized(this),返回checkSingleton所引用的CheckSingleton对象(也就是线程A所创建的 对象),退出静态工厂方法.
阅读全文
0 0
- 单例模式的双重检查成例的研究
- 《Java与模式》学习笔记(6)——双重检查成例的研究
- 何谓双重检查成例?
- 双重检查锁定及单例模式 双重检查锁定失效的原因!!
- 双重检查锁实现的单例模式
- 一个经典的单例模式(双重检查锁)
- Java单例模式中双重检查锁的问题
- Java单例模式中双重检查锁的问题
- Java单例模式中双重检查锁的问题
- 单例模式中的 双重检查锁定(Double-Check Locking ) (多线程下单例模式中的双重检查锁定的实现)
- 双重检查锁定及单例模式
- 单例模式与双重检查方案
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- SVN 回滚(撤回)提交的代码
- 【备忘】2017年7月最新微服务架构的分布式事务解决视频教程
- android实时显示触屏坐标
- MVP简单使用+RecyclerView
- Linux下Mysql自启动
- 单例模式的双重检查成例的研究
- Ubuntu安装Mac主题
- IOError: RPC server not started
- C++对Lua中table进行读取、修改和创建
- 悲观锁和乐观锁的学习
- docker镜像下给容器直接安装vim编译器
- 两个List合并
- L2-017. 人以群分
- CMake 使用第一篇