双重检验锁定单例模式的优化写法(非volatile,全版本jvm通用)
来源:互联网 发布:联通 套餐 4g数据副卡 编辑:程序博客网 时间:2024/05/19 17:23
- 首先介绍下普通的双重检查锁定:
图中这样的代码是有问题的,因为jvm存在无序写入,在代码sInstance = new TestSingleTon() 这一处,有可能在构造函数执行前sInstance变为非null,这时的sInstance指向是一个尚未构造完成的对象,这时其他线程可能会得到一个尚未初始化完成的对象,对这个对象进行操作是会出现问题的;
针对可能出现上述无序写入问题,我研究出了双重检查的优化写法:
尽管jvm存在无序写入,但只有当对象构造完成checkSInstanceIsNul才会为非null,其他线程永远只会获的完整构造的对象。此方法是我独创的写法,既解决了同步带来的开销问题,又解决了懒加载问题,而且在jvm1.5以前也是可用的(volitile在1.5以前的实现有问题,所以使用volatile不能解决问题)。
0 0
- 双重检验锁定单例模式的优化写法(非volatile,全版本jvm通用)
- 单例模式的优化-双重锁定
- 单例模式 :双重锁定的探讨
- 单例模式的五种写法:懒汉/饿汉/双重检验锁/静态内部类/枚举
- 双重检查锁定及单例模式 双重检查锁定失效的原因!!
- 单例模式,双重检验锁
- 多线程中创建单例模式的双重锁定
- 单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
- 单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
- 单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
- 单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
- 单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举
- 单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
- 单例模式五种写法 懒汉、饿汉、双重检验锁、静态内部类、枚举。
- 单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 双重检查锁定及单例模式
- 迭代字典中的key和value
- Linux下使用samba工具共享文件
- final、finally和finalize的区别
- MYSQL问题
- 树与二叉树的概念
- 双重检验锁定单例模式的优化写法(非volatile,全版本jvm通用)
- 三款主流静态源代码安全检测工具比较
- tolua动态注册对象的使用
- asp.net头部指令<%@%>内的各项含义
- Linux下给自己的应用程序创建一个桌面启动图标
- SAP接口编程之 NCo3.0系列(05) : Table作为输入参数
- 乡下回忆:王子臣
- SAP接口编程之 NCo3.0系列(06) : 会话管理
- 分布式锁原理介绍