当前位置:  技术问答>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呀,为什么??怪

|
不可能的。不会是你看错了吧?:)
或者是你把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毫秒的。

|
Thread.sleep();本身就是不精确的时间。所以偏差是肯定的

|
我不是说得很清楚了么,线程sleep的时间根本就不是5000,sleep不是精确的,sleep(5000)可能实际上只sleep(4994),但也可能sleep(5004),而且currentTimeMillis也不是精确的,如果实际时间是80000,返回值可能是79995也可能是80003,这两个方法都不精确,结果怎么能精确?就算是计算机时钟也只能有一个最小分辨值的,根本没有任何东西是能精确到你的理想情况的,但你总以理想的情况去分析一个不精确的结果.结账吧

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • jquery对象和javascript对象即DOM对象相互转换
  • c#对象中两种copy操作:深拷贝(Deep Copy)与浅拷贝(Shallow Copy)
  • 请问如何把StringBuffer 的对象转化成一个InputStream 的对象,或者InputStream 子类的对象也可以!
  • c++类对象数组初始化方式
  • 用RMI进行远程对象调用的时候,可不可以实现多个调用远程对象的并发操作 iis7站长之家
  • php中检测变量是否是一个对象的is_object函数介绍及用法举例
  • Glib对象系统(也称为"GObject")内部是如何实现面向对象特征的呢?
  • c++类对象初始化方式
  • 用RMI进行远程对象调用的时候,可不可以实现多个调用远程对象的并发操作
  • java tomcat实现Session对象的持久化原理及配置方法介绍
  • 你们看是不是可以这样理解:在用来进行两个对象的比较时,==操作符用来比较两个对象的引用地址,而equals()用来比较两个对象的值。
  • 将ResultSet结果集中的记录映射到Map对象中
  • 请问:能不能动态的运行时生成对象(动态定义对象), 要涉及到哪些技术, 反射,序列化...??
  • php 5.5.14数据对象(PDO)介绍及PDO的预定义常量介绍
  • 重新编译PLSQL中的无效对象或者指定的对象 的方法
  • jquey笔记之dom对象与jquery对象互换的例子
  • 有人问我:何为面向对象编程?我给不出确切或形象的说法。谢!vb、pb等开发工具是不是面向对象编程的语言。
  • 写一个方法,向它传递一个对象,循环打印出对象层次结构中的所有类?thinking in java里面的一个习题不知道如何做请教高手?
  • “当某个实例不再被任何对象引用时就会被垃圾回收机制回收”,那么怎样才算是不被任何对象引用呢?
  • 我的APPLET在Jbuilder5中,可以调用EJB对象,但是移植到网页上却不能调用EJB对象!是何缘故,值得研究!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3