我正在阅读关于课程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
?
提前谢谢
答案 0 :(得分:2)
看看这个:
此问题的许多答案可能会有所帮助:
答案 1 :(得分:2)
确实考虑了nanos:第三个if
说:
if (nanos >= 500000...
timeout++;
这意味着如果我们有超过500000纳米的时间,我们会将其四舍五入到另一毫秒,否则,我们会将其四舍五入。
在将其转换回毫秒之后,它也符合定义:1000000*timeout+nanos
。