Thread.sleep() в Java – Java Thread sleep

Введение

Метод Thread.sleep() в Java может быть использован для приостановки выполнения текущего потока на определенное время в миллисекундах. Значение аргумента для миллисекунд не может быть отрицательным. В противном случае он вызывает IllegalArgumentException.

sleep(long millis, int nanos) – это еще один метод, который может быть использован для приостановки выполнения текущего потока на определенное количество миллисекунд и наносекунд. Разрешенные значения наносекунд находятся в диапазоне от 0 до 999999.

В этой статье вы узнаете о Thread.sleep() в Java.

Как работает Thread.sleep

Thread.sleep() взаимодействует с планировщиком потоков, чтобы перевести текущий поток в состояние ожидания на определенный период времени. Как только время ожидания истекает, состояние потока изменяется на готовое к выполнению и ожидает ЦП для дальнейшего выполнения. Фактическое время, в течение которого текущий поток спит, зависит от планировщика потоков, который является частью операционной системы.

Важные моменты Java Thread.sleep

  1. Он всегда приостанавливает выполнение текущего потока.
  2. Фактическое время, которое поток спит, прежде чем проснуться и начать выполнение, зависит от системных таймеров и планировщиков. Для тихой системы фактическое время сна близко к указанному времени сна, но для загруженной системы оно может быть немного дольше.
  3. Thread.sleep() не теряет мониторы и не блокирует текущий поток, который он приобрел.
  4. Любой другой поток может прервать текущий поток во время сна, и в таких случаях будет сгенерировано исключение InterruptedException.

Пример использования Java Thread.sleep

Вот пример программы, где Thread.sleep() используется для приостановки выполнения основного потока на 2 секунды (2000 миллисекунд):

ThreadSleep.java
package com.journaldev.threads;

public class ThreadSleep {

    public static void main(String[] args) throws InterruptedException {
        long start = System.currentTimeMillis();

        Thread.sleep(2000);

        System.out.println("Sleep time in ms = " + (System.currentTimeMillis() - start));
    }
}

Сначала этот код сохраняет текущее системное время в миллисекундах. Затем он спит 2000 миллисекунд. Наконец, этот код выводит разницу между новым текущим системным временем и предыдущим текущим системным временем:

Output
Sleep time in ms = 2005

Обратите внимание, что эта разница не точно 2000 миллисекунд. Это связано с тем, как работает Thread.sleep() и с операционной системой-специфичной реализацией планировщика потоков.

Заключение

В этой статье вы узнали о Thread.sleep() в Java.

Продолжайте обучение с дополнительными уроками по Java.

Source:
https://www.digitalocean.com/community/tutorials/thread-sleep-java