等待 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。
按照惯例,我会用 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。