Введение
Метод Thread.sleep()
в Java может быть использован для приостановки выполнения текущего потока на определенное время в миллисекундах. Значение аргумента для миллисекунд не может быть отрицательным. В противном случае он вызывает IllegalArgumentException
.
sleep(long millis, int nanos)
– это еще один метод, который может быть использован для приостановки выполнения текущего потока на определенное количество миллисекунд и наносекунд. Разрешенные значения наносекунд находятся в диапазоне от 0
до 999999
.
В этой статье вы узнаете о Thread.sleep()
в Java.
Как работает Thread.sleep
Thread.sleep()
взаимодействует с планировщиком потоков, чтобы перевести текущий поток в состояние ожидания на определенный период времени. Как только время ожидания истекает, состояние потока изменяется на готовое к выполнению и ожидает ЦП для дальнейшего выполнения. Фактическое время, в течение которого текущий поток спит, зависит от планировщика потоков, который является частью операционной системы.
Важные моменты Java Thread.sleep
- Он всегда приостанавливает выполнение текущего потока.
- Фактическое время, которое поток спит, прежде чем проснуться и начать выполнение, зависит от системных таймеров и планировщиков. Для тихой системы фактическое время сна близко к указанному времени сна, но для загруженной системы оно может быть немного дольше.
Thread.sleep()
не теряет мониторы и не блокирует текущий поток, который он приобрел.- Любой другой поток может прервать текущий поток во время сна, и в таких случаях будет сгенерировано исключение
InterruptedException
.
Пример использования Java Thread.sleep
Вот пример программы, где Thread.sleep()
используется для приостановки выполнения основного потока на 2 секунды (2000 миллисекунд):
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 миллисекунд. Наконец, этот код выводит разницу между новым текущим системным временем и предыдущим текущим системным временем:
OutputSleep time in ms = 2005
Обратите внимание, что эта разница не точно 2000 миллисекунд. Это связано с тем, как работает Thread.sleep()
и с операционной системой-специфичной реализацией планировщика потоков.
Заключение
В этой статье вы узнали о Thread.sleep()
в Java.
Продолжайте обучение с дополнительными уроками по Java.
Source:
https://www.digitalocean.com/community/tutorials/thread-sleep-java