静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式(三)

2014-11-24 09:04:18 · 作者: · 浏览: 6
么呢?想了解这个问题就要明白instance = new Singleton();这句话是怎么执行的,下面用一段伪代码向大家解释一下:
[java]
mem = allocate(); //为Singleton对象分配内存。
instance = mem; //注意现在instance是非空的,但是还没有被初始化。
ctorSingleton(instance); //调用Singleton的构造函数,传递instance.
由此可见当一个线程执行到instance = mem; 时instance已为非空,如果此时另一个线程进入程序判断instance为非空,那么直接就跳转到return instance;而此时Singleton的构造方法还未调用instance,现在的值为allocate();返回的内存对象。所以第二个线程得到的不是Singleton的一个对象,而是一个内存对象。
以上就是就是我对单例模式的一点小小的思考跟理解,热烈欢迎各位大神前来指导批评。