首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java中双重检测失败(DCL)的缘故

2012-10-08 
Java中双重检测失败(DCL)的原因用一个最简单最容易理解的解释方法(可能不是很正确),就是打如下比方: Objec

Java中双重检测失败(DCL)的原因
用一个最简单最容易理解的解释方法(可能不是很正确),就是打如下比方:
Object a = new Object();
假设在Object对象创建过程中需要初始化两个值域m1和m2,正常的过程应该是:开始对象创建,得到一个对象句柄,m1初始化,m2初始化,把这个对象句柄赋值给变量a。
但是由于重排序的存在,可能实际的执行过程变为:开始对象创建,得到一个对象句柄,m1初始化,把这个对象句柄赋值给变量a,m2初始化。而另一个线程在这个对象句柄赋值给变量a后,m2初始化前来访问变量a,并通过a访问到这个创建中的对象,喏,问题出来了,m2初始化还没有完成呢...

类加载器延迟加载

public class Singleton {        private static class Holder {       static final Singleton instance = new Singleton();     }       public static Singleton getInstance() {       return Holder.instance;        }      }  


热点排行