静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式
百度众说纷纭的情况下就不如自己写例子测试理论,话不多说,上代码:
mem = allocate(); //为Singleton对象分配内存。 instance = mem; //注意现在instance是非空的,但是还没有被初始化。 ctorSingleton(instance); //调用Singleton的构造函数,传递instance.
由此可见当一个线程执行到instance = mem; 时instance已为非空,如果此时另一个线程进入程序判断instance为非空,那么直接就跳转到return instance;而此时Singleton的构造方法还未调用instance,现在的值为allocate();返回的内存对象。所以第二个线程得到的不是Singleton的一个对象,而是一个内存对象。
以上就是就是我对单例模式的一点小小的思考跟理解,热烈欢迎各位大神前来指导批评。