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

静态内部类、静态变量的加载次数-懂得静态内部类实现线程安全的单例模式

2013-10-11 
静态内部类、静态变量的加载次数-理解静态内部类实现线程安全的单例模式百度众说纷纭的情况下就不如自己写

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

百度众说纷纭的情况下就不如自己写例子测试理论,话不多说,上代码:

mem = allocate();             //为Singleton对象分配内存。  instance = mem;               //注意现在instance是非空的,但是还没有被初始化。    ctorSingleton(instance);    //调用Singleton的构造函数,传递instance. 

由此可见当一个线程执行到instance = mem; 时instance已为非空,如果此时另一个线程进入程序判断instance为非空,那么直接就跳转到return instance;而此时Singleton的构造方法还未调用instance,现在的值为allocate();返回的内存对象。所以第二个线程得到的不是Singleton的一个对象,而是一个内存对象。


以上就是就是我对单例模式的一点小小的思考跟理解,热烈欢迎各位大神前来指导批评。


2楼sunbo624昨天 17:37
我想错了 当成数据库的原子操作了 还是不能阻塞其它线程
1楼sunbo624昨天 15:11
假如一开始写return instance != null ? instance : instance = new Singleton();呢n不知道问号表达式编译以后和if else是否相同 如果?还是元操作级别的 就解决这个问题了吧
Re: wm5920昨天 15:56
回复sunbo624n元操作级别?三目运算符还是不能解决多线程问题啊,请指教,谢谢

热点排行