繁体   English   中英

Java重新排序会影响System.currentTimeMillis()吗?

[英]Does Java reordering affect System.currentTimeMillis()?

根据Java Memory Model,只要执行结构良好 ,指令就可以重新排序。

所以我想知道,以下代码是否可能产生以下输出?

[代码] [在同一个主题中]

long a = System.currentTimeMillis();
long b = System.currentTimeMillis();
long c = System.currentTimeMillis();

[输出]

a == 10, b == 20, c == 15

如果不可能,那么JVM /实现会做些什么来防止这种情况发生?

请参阅此问题指令重新排序和发生在java之前的关系

我相信,除非您处于不同的线程中,否则任何执行的结果将始终与代码中的顺序一致。 在这种情况下,由于无法按顺序处理它,即使您的字段对另一个线程可见,它也应该是好的。

由于是用户系统调用,编译器不应该在同一个线程中重新排序它们。 如果不是这样,我们甚至可以在System.out.println(独立值)中体验重新排序效果; 我想对System / OS的时钟的访问在这些操作之间创建了一种关系(总是针对当前线程),所以理论上它们之间存在某种依赖关系。 可能JVM会考虑此问题,并且永远不会重新排序用户系统调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM