首页 新闻 会员 周边

Java 的Thread.sleep(long millis, int nanos) 方法

0
悬赏园豆:15 [已解决问题] 解决于 2022-07-15 15:04
    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);
    }

从这个方法里面我得到的信息,线程sleep时间的最小时间单位是毫秒。但是这个nanos参数的意义我不是很明白,当大于500000或者填写了nanos,但millis等于0时可以加一,但是,当mills大于0,nanos<500000时,并不能实际控制线程睡眠时间,Thread.sleep(1,200),Thread.sleep(1,4444)时,效果是一样的,。想知道这个nanos参数的意义,为什么是这样设计的。

15年的夏天的主页 15年的夏天 | 初学一级 | 园豆:47
提问于:2022-06-20 11:34
< >
分享
最佳答案
0

500000 ns = 0.5 ms
这里是四舍五入的意思,超过 0.5ms 算 1ms,不超过舍去,并不能精确到纳秒
没觉得有什么实际意义

收获园豆:15
飒沓流星 | 小虾三级 |园豆:1099 | 2022-06-20 12:36

哈哈哈哈哈,原来就是四舍五入的意思,我呆逼了

15年的夏天 | 园豆:47 (初学一级) | 2022-06-21 13:57

@15年的夏天: 😂

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-21 14:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册