Подтвердить что ты не робот

Какова цель сна (длинные миллионы, int nanos)?

В JDK он реализован как:

public static void sleep(long millis, int nanos) 
throws InterruptedException {
if (millis < 0) {
        throw new IllegalArgumentException("timeout value is negative");
}

if (nanos < 0 || nanos > 999999) {
        throw new IllegalArgumentException(
            "nanosecond timeout value out of range");
}

if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
    millis++;
}

sleep(millis);
}

что означает, что аргумент nanos ничего не делает.

Является ли идея, что на аппаратном обеспечении с более точным временем, JVM для него может обеспечить лучшую реализацию для него?

4b9b3361

Ответ 1

Обычная ОС не имеет достаточно мелкого разрешения, чтобы спать за наносекунды за раз. Тем не менее существуют операционные системы реального времени, когда планирование события в определенный момент времени является критическим, а задержки для многих операций ОЧЕНЬ низкими. Система АБС является одним из примеров RTOS. Сон для наносекунд гораздо более полезен для таких систем, чем для обычных ОС, где ОС не может надежно спать в течение любого периода менее 15 мс.

Однако наличие двух отдельных JDK не является решением. Следовательно, в Windows и Linux JVM постарается лучше спать за x наносекунды.

Ответ 2

Это похоже на будущее доказательство, потому что, когда у всех нас есть ноутбуки petaflop, и мы регулярно определяем задержки в наносекундах. Между тем, если вы укажете наносекундную задержку, вы получите миллисекундную задержку.

Когда аппаратное обеспечение улучшается и JVM следует, приложение не нужно перезаписывать.

Ответ 3

Проблема с будущей проверкой обратной совместимости. Этот метод так долго работал, что, если вы хотите субмикросекундные задержки, вам нужно использовать разные методы.

Для сравнения,

 Object.wait(millis, nano);