我正在阅读有关类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
将其转换回毫秒后。