考虑以下两个块:我们是否应该在执行超时时使用Thread.sleep()?
// block one
long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start < TIMEOUT) {
if(SOME_CONDITION_IS_MET) {
// do something
break;
} else {
Thread.sleep(100);
}
}
// block two
long start = System.currentTimeMillis();
while (System.currentTimeMillis() - start < TIMEOUT) {
if(SOME_CONDITION_IS_MET) {
// do something
break;
}
}
这两者之间的区别在于,第一个具有Thread.sleep()方法,它似乎能降低条件在while
和if
检查。然而,假设if
条件不具有繁重的计算,是否有任何有意义的好处?你会推荐哪一个实现超时?
都没有。这两个相当脏的黑客,应尽可能避免。话虽如此,第一个让CPU有机会做其他事情 - 第二个选项绝对没有理由吃掉整个核心。 – 2014-10-05 15:44:14
虽然第二次操作至少需要100 ms,如果条件仅在第一次检查1μs后才变为真,则该操作可能会相当长。 – 5gon12eder 2014-10-05 16:00:26