考慮以下兩個塊:我們是否應該在執行超時時使用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