Double-checked locking and the Singleton pattern--双重检查加锁失效原因剖析
2015-08-24 10:52
435 查看
以下内容摘取自http://stackoverflow.com/questions/11195389/out-of-order-writes-for-double-checked-locking Thread1 could publish the [code]instancereference to the main memory, but fail to publish any other data inside the
Singletonobject that wascreated. Thread2 will observe the object in an inconsistent state.
大概意思是Thread2有可能在Thread1构造函数执行一部分的时候读取Instance,比如Vector赋值,但inUser为false时,这时候就会造成两个线程获取的instance状态不一致。
[/code]
import java.util.Vector; class Singleton { private static Singleton instance; private Vector v; private boolean inUse; private Singleton() { v = new Vector(); v.addElement(new Object()); inUse = true; } public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { // 1 if (instance == null) // 2 instance = new Singleton(); // 3 } } return instance; } }
相关文章推荐
- 食品机械未来发展之路
- 微信为什么要限制律师公众号的申请?
- Best Time to Buy and Sell Stock C#
- Android笔记四
- hdoj 3665 Seaside 【最短路&&SPFA】
- POJ 2236 Wireless Network(简单并查集)
- 割点与割边问题
- 图形绘制处理逻辑VC
- PAT (Basic Level) Practise:1037. 在霍格沃茨找零钱
- js-事件捕获与事件冒泡原理 IE和DOM之间存在哪些主要差别
- SVN提交代码前需要注意的事项
- 百度地图需要SHA1。
- MongoDB 聚合
- nginx配置示例
- 关于dispatch_sync死锁问题
- FindProxyForURL设置浏览器代理
- HDU2053Switch Game
- 自己写的异步下载 安卓
- 关于几篇帮助理解的帖子链接(更新中)
- Gerrit源码开发环境搭建详解