我目前正在用 Java 编写一个多线程程序。在某些时候,不同的线程会记录他们的动作,我正在使用nanoTime
它。每个线程都有自己的日志文件,最后我将它们合并并根据它们的时间(nanoTime
)对它们进行排序以查看发生了什么。问题是我有与此类似的错误行为,其中x
是一个volatile
变量:
// logged by thead1
x = true // done at time 0000, time computed & logged after x = true was done
// no events in between
// logged by thread2
read x // reads false while time before reading is 0001
所以在我看来,这nanoTime
并没有真正正确地计时。在nanoTime
文档中是这样写的:
仅当在 Java 虚拟机的同一实例中获得的两个此类值之间的差异被计算时,此方法返回的值才有意义。
由同一进程创建的线程是否有可能在不同的 JVM 中执行?这可以解释错误行为,nanoTime
但仍然没有太大意义。有任何想法吗?