我做了一个小程序来测试System.currentTimeMillis().我有一个奇怪的结果.这是我的日志:
1 26-12-09 20:48:21 - [Log] lTime = 1261860501009
2 26-12-09 20:48:21 - [Log] lTime = 1261860501012
3 26-12-09 20:48:21 - [Log] lTime = 1261864899078
4 26-12-09 20:48:21 - [Log] lTime = 1261860501033
5 26-12-09 20:48:21 - [Log] lTime = 1261860501069
Run Code Online (Sandbox Code Playgroud)
如您所见,第3行存在问题.时间磨损是错误的.它应该在1261860501012和1261860501033之间.大约有73毫秒的误差.
有人知道问题来自哪里?
非常感谢
bill0ute
编辑:操作系统:Debian 4.0,Java:6_17.
我的代码:
while (true)
setLog (System.currentTimeMillis ());
Run Code Online (Sandbox Code Playgroud)
编辑:程序在基于Linux的VPS上运行
首先,你有一个小错字,它是 73 毫秒,而不是秒(那么会令人不安:-))。
言归正传,您应该知道 Java 是一种非常高级的语言,只能通过本机函数调用来访问系统函数。这些调用是由您的虚拟机实现的,并且有很多(Sun、Open、Dalvik..),因此无法给出一般建议,但返回时间 currentTimeMillis 取决于很多东西,例如线程(在VM以及本机线程中),板载计时器的分辨率等。我承认结果很奇怪,但除非你高度依赖它们的正确顺序,否则我不会打扰,只是忍受异常范围为十分之一秒。
如果您需要更具体的建议,请粘贴一些您的源代码!
编辑:
在看过你的源代码后,我很确定你的 Log 函数使用了某种优先级处理或线程,这会导致错误的结果。只需尝试分配相关方法的返回值并将该变量传递到您的日志:
long foo = System.currentTimeMillis();
setLog(foo);
Run Code Online (Sandbox Code Playgroud)