【发布时间】:2014-07-26 13:51:13
【问题描述】:
我正在阅读有关 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);
}
第一个和第二个ifs 很明显。第三个什么都不做,或者只是增加timeout,不关心nanos。
我的问题是,我如何调用 wait(long timeout, int nanos) 方法,它真正适用于给定的 nanos?
提前谢谢你
【问题讨论】:
-
使用不同的虚拟机。如果您检查其他 vm 源,您最终会找到一个在本机代码中实现了该等待的源。您还需要一个支持纳米计时器的操作系统。
标签: java