如何使用方法Object.wait(long timeout,int nanos)

时间:2014-06-05 14:07:27

标签: java

我正在阅读关于课程Object的内容,我发现了一种方法wait(long timeout, int nanos)

我阅读了说明Docs Oracle Class Object,我发现:

  

以纳秒为单位的实时量由下式给出:

1000000*timeout+nanos
     

参数:
   timeout - 等待的最长时间(以毫秒为单位)    nanos - 额外的时间,以纳秒为单位,范围为0-999999。

我看了一下这个方法的实现(openjdk-7u40-fcs-src-b43-26_aug_2013),我找到了这段代码:

public final void wait(long timeout, int nanos) throws InterruptedException {
    if (timeout < 0) {
        throw new IllegalArgumentException("timeout value is negative");
    }

    if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException(
                            "nanosecond timeout value out of range");
    }

    if (nanos >= 500000 || (nanos != 0 && timeout == 0)) {
        timeout++;
    }

    wait(timeout);
}

第一个和第二个if是显而易见的。第三个没有做任何事情或仅仅增加timeout并且不关心nanos

我的问题是,我如何调用真正适用于wait(long timeout, int nanos)的方法nanos

提前谢谢

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

确实考虑了nanos:第三个if说:

if (nanos >= 500000...
    timeout++;

这意味着如果我们有超过500000纳米的时间,我们会将其四舍五入到另一毫秒,否则,我们会将其四舍五入。

在将其转换回毫秒之后,它也符合定义:1000000*timeout+nanos