对于instance = new Someobject(),并不是一个原子操作,这个过程分成了3步:
1,给 instance 分配内存
2,调用 Someobject的构造函数来初始化成员变量
3,将instance对象指向分配的内存空间在JVM的即时编译器中,存在指令重排序。在上面的例子中,2操作依赖1操作,但3操作并不依赖2操作,也就是说上面的第二步和第三步的顺序是不能保证的,最终的执行顺序可能是1-2-3 也可能是1-3-2。那么不就会导致在普通情况下得到的instance 就可能是一个没有初始化的对象引用?不涉及多线程,就是单线程的最普通的instance = new Someobject()语句,会产生这种问题吗?还是我理解错了?真心求解