[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-mnogopotochnost-chto-znachit-usypit-potok":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":19,"progress":20,"seo":21},255,"chto-znachit-usypit-potok",8,"mnogopotochnost","Многопоточность","🔀","Что значит усыпить поток?","\u003C!-- grade: 4\u002F5 — ответ правильный, но не раскрыты нюансы точности и альтернативы -->\n\n**«Усыпить» поток** означает приостановить его выполнение на заданный промежуток времени с помощью статического метода `Thread.sleep()`. Поток переходит из состояния `RUNNABLE` в состояние `TIMED_WAITING` и не потребляет процессорное время до истечения указанного интервала.\n\n### Сигнатуры метода\n\n```java\n\u002F\u002F Пауза на указанное число миллисекунд\npublic static void sleep(long millis) throws InterruptedException;\n\n\u002F\u002F Пауза с точностью до наносекунд\npublic static void sleep(long millis, int nanos) throws InterruptedException;\n\n\u002F\u002F Java 19+ — пауза с использованием Duration\npublic static void sleep(Duration duration) throws InterruptedException;\n```\n\n### Ключевые особенности\n\n| Аспект | Описание |\n|---|---|\n| Монитор | Поток **не освобождает** захваченные мониторы во время сна |\n| Прерывание | Если во время сна вызван `interrupt()`, поток проснётся досрочно и выбросит `InterruptedException`. Флаг прерывания при этом **сбрасывается** |\n| Точность | Реальная пауза может быть **длиннее** заданной (зависит от загрузки системы и гранулярности таймера ОС). На Windows гранулярность по умолчанию ~15.6 мс |\n| `sleep(0)` | Отдаёт остаток текущего кванта времени планировщику, аналогично `Thread.yield()`, но с некоторыми отличиями |\n\n### Пример\n\n\u003Cdetails>\n\u003Csummary>Пример: усыпление с обработкой прерывания\u003C\u002Fsummary>\n\n```java\npublic class SleepDemo {\n    public static void main(String[] args) {\n        Thread worker = new Thread(() -> {\n            try {\n                System.out.println(\"Поток засыпает на 5 секунд...\");\n                Thread.sleep(5000);\n                System.out.println(\"Поток проснулся!\");\n            } catch (InterruptedException e) {\n                System.out.println(\"Поток разбужен досрочно прерыванием!\");\n                \u002F\u002F Хорошая практика: восстановить флаг прерывания\n                Thread.currentThread().interrupt();\n            }\n        });\n        worker.start();\n\n        \u002F\u002F Через 2 секунды прерываем спящий поток\n        try { Thread.sleep(2000); } catch (InterruptedException e) { }\n        worker.interrupt(); \u002F\u002F Поток проснётся досрочно\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Отличие от wait()\n\n| Характеристика | `Thread.sleep()` | `Object.wait()` |\n|---|---|---|\n| Освобождает монитор | **Нет** | **Да** |\n| Требует `synchronized` | Нет | Да |\n| Пробуждение | Только по таймеру или `interrupt()` | По `notify()`\u002F`notifyAll()`, таймеру или `interrupt()` |\n| Назначение | Пауза на фиксированное время | Ожидание условия от другого потока |\n\n> **Аналогия из жизни.** `Thread.sleep()` -- это будильник: вы засыпаете и просыпаетесь через заданное время. Но если вас разбудят раньше (прерывание), вы проснётесь, но будете раздражены (`InterruptedException`). При этом, если вы заснули, держа ключ от комнаты (монитор), -- ключ остаётся у вас, и никто не может войти.\n\n> **На собеседовании.** Два обязательных момента: (1) `sleep()` не освобождает монитор -- это классический подвопрос; (2) `InterruptedException` -- не игнорируйте его, а обрабатывайте или восстанавливайте флаг прерывания через `Thread.currentThread().interrupt()`. Также можно упомянуть `TimeUnit.SECONDS.sleep(5)` как более читаемую альтернативу `Thread.sleep(5000)`.","","junior",[15,16,17,18],"interrupt","InterruptedException","Thread.sleep","concurrency",[],null,{"title":22,"description":23,"ogTitle":24,"ogDescription":25,"keywords":26,"schemaAnswer":31,"featuredSnippetReady":32},"Thread.sleep() — усыпление потока в Java — Gymterview","Усыпить поток — приостановить его на заданное время вызовом Thread.sleep(). Поток можно разбудить раньше через interrupt() с выбросом InterruptedException.","Thread.sleep() — как приостановить поток на время","Thread.sleep() приостанавливает поток на указанное время в миллисекундах. Досрочный выход — через interrupt() с InterruptedException.",[27,28,29,30],"Thread.sleep Java","усыпить поток Java","sleep interrupt","InterruptedException sleep","Усыпить поток — приостановить его на определённое время вызовом Thread.sleep() с указанием миллисекунд. До истечения времени поток может быть разбужен вызовом interrupt() с выбрасыванием InterruptedException.",true]