Вы можете попробовать что-то простое, как
private static void spin(int milliseconds) {
long sleepTime = milliseconds*1000000L; // convert to nanoseconds
long startTime = System.nanoTime();
while ((System.nanoTime() - startTime) < sleepTime) {}
}
Тест:
public static void main(String[] args) {
final int NUM_TESTS = 1000;
long start = System.nanoTime();
for (int i = 0; i < NUM_TESTS; i++) {
spin(500);
}
System.out.println("Took " + (System.nanoTime()-start)/1000000 +
"ms (expected " + (NUM_TESTS*500) + ")");
}
Мой вывод:
$ java SpinTest
Took 500023ms (expected 500000)
Таким образом, цикл не был оптимизирован (и да, я поднял свой процессор до 100% в течение восьми минут, просто чтобы проверить это :)).