Код ниже демонстрирует проблему.
Запуск на моем компьютере (rMBP 15" 2015, OS X 10.11, jre 1.8.0_40-b26) дает следующий результат:
Код: Выделить всё
Control: 48497
Random: 36719
Thread.sleep(0): 48044
Thread.sleep(1): 832271
Код: Выделить всё
Control: 98974
Random: 61019
Thread.sleep(0): 115623
Thread.sleep(1): 282451
Код: Выделить всё
Control: 1385670
Random: 1202695
Thread.sleep(0): 1393994
Thread.sleep(1): 1413220
Очевидно, что Thread.sleep(1) влияет на вычисление приведенный ниже код. Я понятия не имею, почему это происходит. Кто-нибудь знает?
Спасибо!
Код: Выделить всё
public class Main {
public static void main(String[] args) {
int N = 1000;
long timeElapsed = 0;
long startTime, endTime = 0;
for (int i = 0; i < N; i++) {
startTime = System.nanoTime();
//search runs here
endTime = System.nanoTime();
timeElapsed += endTime - startTime;
}
System.out.println("Control: " + timeElapsed);
timeElapsed = 0;
for (int i = 0; i < N; i++) {
startTime = System.nanoTime();
//search runs here
endTime = System.nanoTime();
timeElapsed += endTime - startTime;
for (int j = 0; j < N; j++) {
int k = (int) Math.pow(i, j);
}
}
System.out.println("Random: " + timeElapsed);
timeElapsed = 0;
for (int i = 0; i < N; i++) {
startTime = System.nanoTime();
//search runs here
endTime = System.nanoTime();
timeElapsed += endTime - startTime;
try {
Thread.sleep(0);
} catch (InterruptedException e) {
break;
}
}
System.out.println("Thread.sleep(0): " + timeElapsed);
timeElapsed = 0;
for (int i = 0; i < N; i++) {
startTime = System.nanoTime();
//search runs here
endTime = System.nanoTime();
timeElapsed += endTime - startTime;
try {
Thread.sleep(2);
} catch (InterruptedException e) {
break;
}
}
System.out.println("Thread.sleep(1): " + timeElapsed);
}
}
Есть ли способ исправить это?
Спасибо за любой вклад!
Подробнее здесь: https://stackoverflow.com/questions/337 ... -a-call-to