乱序执行(指令重排)
是这样说的:
private static Service service = null;
service = new Service();
第二句代码,分了三步:
1、内存中为对象分配空间;
2、对象空间初始化(初始化对象属性);
3、引用service指向分配的对象地址;
说上面的2、3可能会存在指令重排;
就是service先指向了内存地址,service不再是null;后将对象初始化完毕;
这明明就是一个复制语句,刚学编程老师就教过,赋值语句会最后执行。到了他们嘴里,就变成了什么指令重排、乱序执行。
具体见:http://blog.itpub.net/28912557/viewspace-762047/
然后测了一个下午,加一个晚上,都没测出个乱序执行的现象。
很累呢....
望各位大神指点,给出问题重现的代码。跪谢。
他们说的解决办法:
1、用volatile关键字修饰,既保证可见性,又保证了它所修饰的目标所涉及的代码不会存在指令重排。牺牲了一点点效率(主内存数据交换)。
网友评论