根据Java内存模型,指令可以重新排序,只要执行格式良好的 http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.7.
所以我想知道,以下代码是否可能产生以下输出?
[代码][在同一线程中]
long a = System.currentTimeMillis();
long b = System.currentTimeMillis();
long c = System.currentTimeMillis();
[output]
a == 10, b == 20, c == 15
如果不可能,那么 JVM/实现会做什么来防止这种情况发生?
请看这个问题java中的指令重新排序和发生之前关系 https://stackoverflow.com/questions/16213443/instruction-reordering-happens-before-relationship-in-java.
我相信,除非您位于不同的线程中,否则任何执行的结果将始终与代码中的顺序一致。在这种情况下,由于不可能无序处理它,所以即使您的字段对另一个线程可见,也应该很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)