Thread 类中有两个sleep方法
sleep(long millis)
sleep(long millis, int nanos)
/**
* 使当前正在执行的线程进入休眠状态(暂时停止执行),持续指定的毫秒数
*/
public static native void sleep(long millis) throws InterruptedException;
/**
* 使当前正在执行的线程进入休眠状态(暂时停止执行),持续指定的毫秒数再加上指定的纳秒数。
*/
public static void sleep(long millis, int nanos) throws InterruptedException {
if (millis < 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 && millis == 0)) {
millis++;
}
sleep(millis);
}
虽然第二个方法注释上明确说明,持续指定的毫秒数再加上指定的纳秒数。
但实际的代码却是
if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
millis++;
}
sleep(millis);
- 大于等于500微秒则加一毫秒,否则就直接不变。
- 当nanos 不为零,millis 为零时加一毫秒