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

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

但是使用它会占用15%的CPU(可听的事情)。 Thread.sleep(int)如何在CPU使用率 Not Acceptable 情况下暂停?我的未经教育的猜测是,它执行的某些 Activity 很耗时,不需要太多的CPU工作量,而且除了耗费时间之外毫无意义。

最佳答案

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

09-11 09:28