等待 Java 中的时间范围:Thread.sleep(int) 是如何工作的?

Wait for a time frame in Java: how does Thread.sleep(int) work?

按照惯例,我会用 Thread.sleep(int)e.printStackTrace() try/catch 块将我的程序延迟一小段时间。我想取消异常处理。我写了这个函数:

private static void pause(int millis) {
    long end = System.currentTimeMillis() + millis;
    while(System.currentTimeMillis() <= end) {
        // Do nothing
    }
}

但使用它会消耗 15% CPU(听得见的事情)。 Thread.sleep(int) 如何在没有不可接受的 CPU 用法的情况下暂停?我没有根据的猜测是它执行了一些 activity,这很耗时,不需要太多 CPU 的努力,而且除了消磨时间之外毫无意义。

Thread.sleep直接通过JNI调用系统函数,如Windows

中的Sleep()函数

Thread.sleep() 什么都不做 activity;线程被挂起。但是,如果您只是想规避异常处理,为什么不将其添加到您的辅助方法中呢?

private static void pause(int millis) {
    try {
        Thread.sleep(millis);
    } catch (InterruptedException e) {
        // Do nothing
    }
}

如果您想确保您的方法永远不会太快完成,您可以将 try-catch 放在 while 循环中。

顺便说一句,从技术上讲,循环不需要主体,因此您可以在方法中用分号替换花括号。

更新:实际上……don't swallow interrupts