简单说一下上面提到的无序写,这是jvm的特性,比如声明两个变量,String a; String b; jvm可能先加载a也可能先加载b。同理,instance = new Singleton();可能在调用Singleton的构造函数之前就把instance置成了非空。这是很多人会有疑问,说还没有实例化出Singleton的一个对象,那么instance怎么就变成非空了呢?它的值现在是什么呢?想了解这个问题就要明白instance = new Singleton();这句话是怎么执行的,下面用一段伪代码向大家解释一下:
[java] 
mem = allocate();             //为Singleton对象分配内存。    
instance = mem;               //注意现在instance是非空的,但是还没有被初始化。    
    
ctorSingleton(instance);    //调用Singleton的构造函数,传递instance.   
由此可见当一个线程执行到instance = mem; 时instance已为非空,如果此时另一个线程进入程序判断instance为非空,那么直接就跳转到return instance;而此时Singleton的构造方法还未调用instance,现在的值为allocate();返回的内存对象。所以第二个线程得到的不是Singleton的一个对象,而是一个内存对象。
 

最新文章

  1. sql获取汉字的拼音首字母
  2. Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录
  3. 安装appcan后打开eclipse出错
  4. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 字符串
  5. okhttputils开源库的混淆配置(Eclipse)
  6. 系统默认字体Mac OS,Windows,XP,Lunix
  7. 如何获取drawable目录下的图片绝对路径
  8. globalCompositeOperation 学习
  9. 基于Grunt的版本号构建系统新手教程
  10. Eclipse Jetty插件安装
  11. apache做反向代理
  12. BZOJ3282Tree——LCT
  13. springbank 开发日志 SpringMVC是如何找到handler找到对应的方法并执行的
  14. Unsupervised Image-to-Image Translation Networks --- Reading Writing
  15. JS拖拽元素原理及实现代码
  16. 【Linux】处理数据文件
  17. MFC程序开始的执行过程详述
  18. 基于Poco的UTF8、UTF16、GBK、Hex之间的转换
  19. 【python 3.6】xlwt和xlrd对excel的读写操作
  20. mysql(四)log

热门文章

  1. ckeditor html标签的class 等attribute属性都被屏蔽啦,替换成空的解决方案
  2. HLS切片机
  3. Exam 70-762 Developing SQL Databases
  4. Struts2页面遍历
  5. (转)C++ STL set() 集合
  6. 关于Zookeeper
  7. python学习笔记:第四天( 字符串)
  8. Linux档案属性
  9. vim 使用、设置笔记
  10. <编译>条件编译——判断当前使用的编译器及操作系统