我正在阅读有关类Object的信息,并且找到了方法wait(long timeout, int nanos)

我阅读了Docs Oracle Class Object描述,发现:


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

1000000*timeout+nanos

  
  参数:
  timeout-等待的最长时间(以毫秒为单位)。
  纳秒-额外时间,以纳秒为单位,范围为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

先感谢您

最佳答案

它确实考虑到了nanos:第三个if表示:

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


这意味着,如果我们有超过500,000纳米,我们会将其舍入到另一个毫秒,否则,我们会将其舍入。

这也符合定义:1000000*timeout+nanos将其转换回毫秒后。

10-06 02:32