thread sleep thread sleep method java with examples
У цьому посібнику ми обговоримо метод сну Thread Sleep () на Java. Ми побачимо, як працює метод Thread.Sleep () за допомогою Прикладів:
java.lang.Thread.sleep (довгі мілі) method - це метод, наданий класом Thread, який переводить поточний поточний режим у режим сну. Ми визначимо час сну як аргумент методу сну.
=> Подивіться тут посібник для початківців Java.
Що ви дізнаєтесь:
Метод сплячого потоку () у Java
Клас Thread Java забезпечує два варіанти методу сну.
Прототип обох варіантів методу sleep () описаний нижче.
# 1) Варіант способу сну No1
Прототип: публічний статичний порожній сон (довгий міліс) викидає InterruptedException
Параметри: міліс => тривалість часу в мілісекундах, протягом якого нитка спить.
Повернене значення: порожнеча
Кидки:
- IllegalArgumentException => якщо міліс негативний
- InterruptedException => якщо будь-який інший потік перериває поточний потік. Коли виникає цей виняток, перерваний стан потоку очищається.
Опис: Ця варіація методу сну переводить поточний потік в режим сну або тимчасово зупиняє його виконання на задану кількість мілісекунд (вказано в аргументі методу). Однак під час сну потік не втрачає монітор і не блокує право власності.
# 2) Варіант методу сну No2
Прототип: загальнодоступний статичний порожній сон (довгий міліс, int nanos) викидає InterruptdException
Параметри:
як написати зразок плану тестування
- міліс => тривалість у мілісекундах, протягом якої нитка повинна спати.
- нанос => додаткові наносекунди, протягом яких нитка може спати. Діапазон становить 0 - 999999.
Повернене значення: порожнеча
Кидки:
- IllegalArgumentException => якщо значення міліса від’ємне або значення нано, якщо поза діапазоном.
- InterruptedException => якщо будь-який інший потік перериває поточний потік. Перерваний стан потоку очищається, коли виникає цей виняток.
Опис: Цей варіант методу сну призводить до того, що потік викликає його до сну або тимчасово зупиняє його виконання протягом заданої кількості мілісекунд. (перший аргумент у виклику методу). Крім того, він також надав кількість наносекунд (другий аргумент у виклику методу) для сну.
Зверніть увагу, що точність і точність зазначеного часу залежить від системних таймерів та планувальників. Коли нитка спить, право власності на замок або монітор не змінюється.
Метод роботи з ниткою
Всякий раз, коли нитка спить або підвішена, це робить планувальник. Метод Thread.sleep () взаємодіє з планувальником потоків, так що планувальник може викликати зміну поточного потоку, який очікує стану протягом заданої тривалості.
Після закінчення зазначеного часу стан потоку змінюється на «запущений», щоб він міг зачекати, поки процесор продовжить виконання.
Таким чином, тривалість того, як довго потік спить, залежить від планувальника, а не від методу. Оскільки планувальник є частиною операційної системи, архітектура ОС також відіграє роль у зміні стану потоку.
Тепер, коли ми детально розглянули метод Thread.sleep (), слід пам’ятати про деякі моменти, використовуючи цей метод.
Покажчики включають:
# 1) Метод Thread.sleep () завжди призупиняє виконання поточного потоку.
# два) Фактична тривалість, протягом якої потік спить, залежить від планувальників та системних таймерів.
Наприклад, для дуже зайнятої системи час сну потоку може бути довшим, ніж зазначений, тоді як для системи, яка не настільки зайнята, вона може бути більш-менш близькою до заданого часу.
# 3) Поки нитка спить, вона не втрачає жодних замків або моніторів, придбаних перед сном.
# 4) Поточний потік, який знаходиться у режимі сну, може перервати будь-який інший потік. У цьому випадку видається “InterruptedException”.
Приклад Thread.sleep в Java
Перейдемо тепер до прикладу, який демонструє метод сну. Тут ми маємо клас потоків, який має метод run (). У методі run () ми називаємо 'Thread.sleep (1000)'. Тоді в основній функції ми створюємо два екземпляри цього потоку, тобто два потоки. Потім починаємо нитки.
На виході ми помічаємо, що оскільки обидва потоки працюють, потоки плануються один за одним, тобто коли один спить, другий працює.
Приклад:
class SleepThread extends Thread { //run method for thread public void run() { for(int i=1;i<5;i++) { try { //call sleep method of thread Thread.sleep(1000); }catch(InterruptedException e){System.out.println(e);} //print current thread instance with loop variable System.out.println(Thread.currentThread().getName() + ' : ' + i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread thread_1 = new SleepThread(); SleepThread thread_2 = new SleepThread(); //start threads one by one thread_1.start(); thread_2.start(); } }
Вихід:
компанії, які платять вам, щоб випробувати їх продукцію
Спостерігаючи за результатами, ми виявляємо, що Thread_0 і Thread_1 виконуються по черзі.
Thread.sleep () із негативним значенням часу сну
Далі продемонструємо ще один приклад методу Thread.sleep (). Тут ми розглянули окремий випадок негативного значення часу сну. Програма подібна до наведеної вище програми, але передбачений час сну становить -500.
Приклад:
class SleepThread extends Thread { public void run() { for(int i=1;i<5;i++) { try { //call sleep method with negative value of time Thread.sleep(-500); }catch(InterruptedException e){System.out.println(e);} System.out.println(i); } } } class Main{ public static void main(String args()) { //create two thread instances SleepThread t1=new SleepThread(); SleepThread t2=new SleepThread(); //start the threads one by one t1.start(); t2.start(); } }
Вихід:
З результатів ми бачимо, що метод викинув 'IllegalArgumentException', оскільки негативне значення часу сну не є прийнятним.
Часті запитання
Q # 1) Як працює режим сну потоків у Java?
Відповідь: Коли сплячий () викликається в потоці із заданою кількістю часу в мілісекундах, потік припиняє своє виконання. Він відмовляється від центрального процесора. Таким чином, протягом тривалості, коли потік спить, інші потоки можуть використовувати центральний процесор.
Q # 2) Що таке yield () і sleep () у потоці Java?
Відповідь: Метод потоку sleep () призводить до того, що потік відмовляється від центрального процесора і припиняє виконання. Поки цей потік спить, інші потоки набувають процесор. Це робить планувальник.
Метод yield () також призводить до того, що потік відмовляється від управління процесором при виклику, але метод sleep () виявляє більш визначену поведінку порівняно з yield ().
Запитання №3) Як зупинити перехід Java-потоку в режим сну?
Відповідь: Ми зупиняємо сплячий режим Java за допомогою методу interrupt (). Будь-який потік, який чекає або спить, можна перервати, викликавши метод interrupt () класу Thread.
Q # 4) Чи можемо ми вбити нитку в Java?
youtube в mp3 довше 90 хвилин
Відповідь: Ні, потік у Java не вбитий. Натомість потік зупинено на Java. Потік завершується, а потім може вимкнено. Ми часто використовуємо летюче логічне поле, яке періодично перевіряється на будь-які зміни значень, щоб ми могли завершити потік.
Q # 5) Чому sleep () є статичним методом?
Відповідь: Викликаючи метод sleep () для переведення потоку в режим сну, ми завжди викликаємо його, використовуючи клас Thread.
Наприклад , Thread.sleep (1000);
Вищезазначений виклик працює у контексті поточного потоку та переводить поточний потік у режим сну. Ми ніколи не викликаємо метод, використовуючи конкретний екземпляр потоку. Таким чином, метод є статичним.
Висновок
У цьому підручнику ми обговорили метод sleep () потоків у Java. Метод Sleep () призводить до того, що поточний потік, який виконується, припиняє своє виконання протягом певного періоду часу, який надається як аргумент методу сну.
Системний планувальник працює із методом сну, щоб перевести поточний потік у стан очікування. Поки нитка спить, вона продовжує мати замки або монітори, які вона придбала. Коли ми передаємо негативне значення часу сну методу сну, він видає «IllegalArgumentException».
Коли ми передаємо дійсне значення часу сну в метод sleep (), інші потоки виконуватимуть чергу, поки поточний потік спить.
=> Перегляньте тут, щоб побачити A-Z навчальних посібників з навчання Java тут.
Рекомендована література
- Багатопотоковість на Java - Підручник із прикладами
- Багатопотоковість на C ++ з прикладами
- Синхронізована Java: Що таке синхронізація потоків у Java
- Потоки Java з методами та життєвим циклом
- Підручник із рядків Java | Рядові методи Java на прикладах
- Як використовувати метод Java toString?
- TreeMap в Java - Підручник з прикладами Java TreeMap
- Підручник JAVA для початківців: 100+ практичних відео-підручників Java