Метод sleep()
класса java.lang.Thread
используется для того, чтобы приостановить выполнение текущего потока на указанное в миллисекундах время. Значение аргумента для миллисекунд не может быть отрицательным, в противном случае будет брошен IllegalArgumentException
.
Существует еще один способ приостановить выполнение работы программы: метод sleep(long millis, int nanos)
. Он используется для того, чтобы приостановить выполнение текущего потока на точное время в миллисекундах и наносекундах. Значение наносекунд допустимо между 0 и 999999.
Вот простая программа, которая использует метод Thread.sleep()
для приостановки выполнения основного потока в течение 2 секунд:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
package ua.com.prologistic; public class ThreadSleep { public static void main(String[] args) throws InterruptedException { // запоминаем текущее время в миллисекундах long start = System.currentTimeMillis(); // останавливаем основной поток программы на 2000 миллисекунд (2 секунды) Thread.sleep(2000); System.out.println("Выполнение программы приостановлено на = " + (System.currentTimeMillis() - start)); } } |
Если вы запустите приведенную выше программу, то заметите, что она остановила выполнение потока на немного большее время, чем на 2000 миллисекунд. Дело в том, что все зависит от операционной системы и конкретной реализации планировщика потоков.
Важные моменты в использовании метода sleep()
- Этот метод всегда приостанавливает выполнение текущего потока.
- Фактическое время от остановки потока до пробуждения зависит от системных таймеров и планировщиков. Для не очень загруженной системы, фактическое время для сна будет очень рядом с указанным временем сна. Для загруженной системы этот показатель будет немного больше.
- Любой другой поток может прервать приостановленный поток. В этом случае его выполнение прерывается и выбрасывается исключение.
Следите за обновлениями раздела Многопоточность и параллелизм в Java.