Автор оригинала: Pankaj Kumar.
Поток.спящий режим на Java
Метод Thread.sleep()
может использоваться для приостановки выполнения текущего потока на указанное время в миллисекундах. Значение аргумента для миллисекунд не может быть отрицательным, иначе оно вызывает исключение IllegalArgumentException
.
Существует еще один перегруженный метод sleep(длинные миллисекунды, в наносекундах)
, который можно использовать для приостановки выполнения текущего потока на указанные миллисекунды и наносекунды. Допустимое значение наносекунды находится в диапазоне от 0 до 999999.
Пример сна потока Java
Вот простая программа, в которой Thread.sleep()
используется для приостановки выполнения основного потока на 2 секунды.
Вот простая программа, в которой || Thread.sleep() || используется для приостановки выполнения основного потока на 2 секунды.
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. Это вызвано тем, как работает режим сна потока и специфичной для операционной системы реализацией планировщика потоков.
Важные моменты сна потока Java
- Это всегда приостанавливает выполнение текущего потока.
- Фактическое время, в течение которого поток спит перед пробуждением и началом выполнения, зависит от системных таймеров и планировщиков. Для тихой системы фактическое время сна близко к указанному времени сна, но для занятой системы оно будет немного больше.
- Спящий поток не теряет никаких мониторов или блокировок, которые приобрел текущий поток.
- Любой другой поток может прервать текущий поток в спящем режиме, в этом случае возникает исключение InterruptedException.
Как Работает Режим Сна Потоков
Функция Thread.sleep() взаимодействует с планировщиком потоков, чтобы перевести текущий поток в состояние ожидания на указанный период времени. По истечении времени ожидания состояние потока изменяется на работоспособное состояние и ожидает, пока процессор продолжит выполнение. Таким образом, фактическое время, в течение которого текущий поток спит, зависит от планировщика потоков, который является частью операционной системы.