Хитрый .... сложно понять, используются ли системные часы для какой-либо стратегии. Тем не менее, вы избегаете часов потому, что время может быть изменено во время паузы потока, но System.nanoTime () не зависит от текущего времени, так как это просто число наносекунды с начала JVM. Соответственно, если в стратегии паузы используются наночастицы, можно предположить, что периоды паузы сохранят точность за счет изменения времени системных часов. Возможно, Thread.join (0, nanos) вызывается в цикле:
public static void pause(long ms) throws InterruptedException {
long final ZERO = 0L;
int final MAX_NANOS = 999999;
for(int i = 0; i < ms+1; i++) {
Thread.currentThread().join(ZERO, MAX_NANOS);
}
}
Я не проверял изменения системных часов, но, похоже, он работает с отклонением в 0,004%.