当前位置: 技术问答>java相关
对象的监视器恢复对象的线程按理说应该大于locked的时间,可是........
来源: 互联网 发布时间:2015-09-15
本文导语: public class PrintSleep { public static void main(String[] args) { long startSleepTime = System.currentTimeMillis(); try { Thread.sleep(5000); // sleep for 5 seconds (5000 milliseconds) } catch (InterruptedException ie...
public class PrintSleep {
public static void main(String[] args) {
long startSleepTime = System.currentTimeMillis();
try {
Thread.sleep(5000); // sleep for 5 seconds (5000 milliseconds)
} catch (InterruptedException ie) {
System.out.println("Oh no! I was interrupted!");
}
long endSleepTime = System.currentTimeMillis();
System.out.println("Finished sleeping. Slept for "
+ (endSleepTime - startSleepTime) + " milliseconds");
}
}
//按理说结果应该肯定大于5000,可是我怎么有的时候出现4997呀,为什么??怪
public static void main(String[] args) {
long startSleepTime = System.currentTimeMillis();
try {
Thread.sleep(5000); // sleep for 5 seconds (5000 milliseconds)
} catch (InterruptedException ie) {
System.out.println("Oh no! I was interrupted!");
}
long endSleepTime = System.currentTimeMillis();
System.out.println("Finished sleeping. Slept for "
+ (endSleepTime - startSleepTime) + " milliseconds");
}
}
//按理说结果应该肯定大于5000,可是我怎么有的时候出现4997呀,为什么??怪
|
不可能的。不会是你看错了吧?:)
或者是你把sleep()方法中的参数改为4990了。
或者是你把sleep()方法中的参数改为4990了。
|
这是JDK documents 里对System.currentTimeMillis()的返回值的说明
Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond, the granularity of the value depends on the underlying operating system and may be larger. For example, many operating systems measure time in units of tens of milliseconds.
设成5000毫秒,在我的机器上一般总是得到4997,做个实验,如果设成5003,则,结果一般总是5007,有时候5006.如果设成5005,则,结果一般还是5007,如果设成5009,则,结果一般总是5017。大致总是差10毫秒。就像帮助文档里说的一样。很多系统是只能精确到10毫秒的。
Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond, the granularity of the value depends on the underlying operating system and may be larger. For example, many operating systems measure time in units of tens of milliseconds.
设成5000毫秒,在我的机器上一般总是得到4997,做个实验,如果设成5003,则,结果一般总是5007,有时候5006.如果设成5005,则,结果一般还是5007,如果设成5009,则,结果一般总是5017。大致总是差10毫秒。就像帮助文档里说的一样。很多系统是只能精确到10毫秒的。
|
Thread.sleep();本身就是不精确的时间。所以偏差是肯定的
|
我不是说得很清楚了么,线程sleep的时间根本就不是5000,sleep不是精确的,sleep(5000)可能实际上只sleep(4994),但也可能sleep(5004),而且currentTimeMillis也不是精确的,如果实际时间是80000,返回值可能是79995也可能是80003,这两个方法都不精确,结果怎么能精确?就算是计算机时钟也只能有一个最小分辨值的,根本没有任何东西是能精确到你的理想情况的,但你总以理想的情况去分析一个不精确的结果.结账吧
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。