thread sleep thread sleep method java with examples
V tomto výukovém programu probereme metodu Thread Sleep () v Javě. Uvidíme, jak metoda Thread.Sleep () funguje pomocí příkladů:
The java.lang.Thread.sleep (dlouhé milis) method je metoda poskytovaná třídou Thread, která uvede aktuálně běžící vlákno do režimu spánku. Čas spánku určíme jako argument metody spánku.
=> Prohlédněte si příručku Java Beginners Guide zde.
Co se naučíte:
Metoda Thread Sleep () v Javě
Třída Thread jazyka Java poskytuje dvě varianty spánkové metody.
Níže je popsán prototyp obou variant metody sleep ().
# 1) Varianta spánkové metody # 1
Prototyp: public static void sleep (long millis) throws InterruptedException
Parametry: millis => doba v milisekundách, po kterou vlákno spí.
Návratová hodnota: prázdnota
Vrhá:
- IllegalArgumentException => pokud je millis záporné
- InterruptedException => pokud jakékoli jiné vlákno přeruší aktuální vlákno. Když dojde k této výjimce, stav přerušení vlákna se vymaže.
Popis: Tato variace spánkové metody způsobí, že aktuální vlákno usne nebo dočasně zastaví jeho provádění po daný počet milisekund (k dispozici v argumentu metody). Během spánku však vlákno neztratí monitor ani nezamkne vlastnictví.
# 2) Varianta spánkové metody # 2
Prototyp: public static void sleep (long millis, int nanos) throws InterruptdException
Parametry:
rozdíl mezi agilním a vodopádovým testováním
- millis => doba v milisekundách, po kterou vlákno musí spát.
- nanos => další nanosekundy, po které vlákno může spát. Rozsah je 0 - 999 999.
Návratová hodnota: prázdnota
Vrhá:
- IllegalArgumentException => pokud je hodnota millis záporná, nebo hodnota nanos, pokud je mimo rozsah.
- InterruptedException => pokud jakékoli jiné vlákno přeruší aktuální vlákno. Přerušení stavu vlákna je vymazáno, když dojde k této výjimce.
Popis: Tato varianta metody spánku způsobí, že vlákno ji vyvolá do režimu spánku nebo dočasně zastaví jeho provádění po daný počet milisekund. (první argument při volání metody). Kromě toho také poskytl počet nanosekund (druhý argument ve volání metody) pro spaní.
Všimněte si, že přesnost a přesnost zadaného času závisí na systémových časovačích a plánovačích. Když vlákno spí, vlastnictví zámku nebo monitoru se nezmění.
Pracovní metoda Thread.Sleep
Kdykoli vlákno spí nebo je pozastaveno, provádí to plánovač. Metoda Thread.sleep () komunikuje s plánovačem podprocesů, takže plánovač může způsobit změnu aktuálně spuštěného podprocesu, aby počkal na stav po danou dobu.
co je qa a qc v testování softwaru
Po uplynutí této zadané doby se stav vlákna změní na „spustitelný“, aby mohl počkat, až CPU provede proces.
Doba trvání, po kterou vlákno spí, tedy závisí na plánovači a ne na metodě. Jelikož je plánovač součástí operačního systému, hraje architektura systému OS také roli při změnách stavu vlákna.
Nyní, když jsme podrobně viděli metodu Thread.sleep (), měli bychom při používání této metody pamatovat na některé body.
Ukazatele zahrnují:
# 1) Metoda Thread.sleep () vždy pozastaví provádění aktuálního vlákna.
#dva) Skutečná doba, po kterou vlákno spí, závisí na plánovačích a systémových časovačích.
Například, pro velmi zaneprázdněný systém může být doba spánku podprocesu delší, než je specifikováno, zatímco pro systém, který není tak zaneprázdněn, může být více či méně blízký stanovenému času.
# 3) Když vlákno spí, neztrácí žádné zámky ani monitory, které získalo před spánkem.
# 4) Aktuální vlákno, které je v režimu spánku, lze přerušit jakýmkoli jiným vláknem. V tomto případě je vyvolána „InterruptedException“.
Thread.sleep Příklad v Javě
Pojďme nyní k příkladu, který předvádí metodu spánku. Tady máme třídu vlákna, která má metodu run (). V metodě run () nazýváme „Thread.sleep (1000)“. Pak v hlavní funkci vytvoříme dvě instance tohoto vlákna, tj. Dvě vlákna. Potom spustíme vlákna.
Na výstupu si všimneme, že protože obě vlákna běží, jsou vlákna naplánována jeden po druhém, tj. Když jeden spí, druhý běží.
Příklad:
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(); } }
Výstup:
Když pozorujeme výstup, zjistíme, že Thread_0 a Thread_1 se střídají při provádění.
Thread.sleep () s negativní hodnotou doby spánku
Dále si ukážeme další příklad metody Thread.sleep (). Zde jsme uvažovali o zvláštním případě záporné hodnoty doby spánku. Program je podobný výše uvedenému programu, ale doba spánku je -500.
Příklad:
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(); } }
Výstup:
Z výstupu vidíme, že metoda vyvolala „IllegalArgumentException“, protože záporná hodnota doby spánku není přijatelná.
Často kladené otázky
Otázka č. 1) Jak funguje režim spánku v Javě?
Odpovědět: Když se na vlákno zavolá režim spánku () se zadaným časem v milisekundách, vlákno zastaví jeho provádění. Vzdává se CPU. Takže během doby, kdy vlákno spí, mohou ostatní vlákna používat CPU.
Otázka 2) Co je yield () a sleep () ve vlákně Java?
Odpovědět: Metoda sleep () vlákna způsobí, že se vlákno vzdá CPU a zastaví provádění. Zatímco toto vlákno spí, ostatní vlákna získávají CPU. To provádí plánovač.
Metoda yield () také způsobí, že se vlákno při volání vzdá řízení CPU, ale metoda sleep () vykazuje ve srovnání s yield () rozhodnější chování.
Otázka č. 3) Jak zastavíte usínání podprocesu Java?
Odpovědět: Zastavíme spánek podprocesu Java pomocí metody interrupt (). Libovolné vlákno, které čeká nebo spí, lze přerušit vyvoláním metody interrupt () třídy Thread.
Otázka č. 4) Můžeme zabít vlákno v Javě?
Odpovědět: Ne, vlákno není v Javě zabito. Místo toho je vlákno zastaveno v Javě. Vlákno je ukončeno a poté se může elegantně vypnout. Často používáme nestálé booleovské pole, které je pravidelně kontrolováno na jakékoli změny hodnot, abychom mohli vlákno ukončit.
Otázka č. 5) Proč je sleep () statická metoda?
Odpovědět: Při volání metody sleep () k uspání vlákna jej vždy zavoláme pomocí třídy Thread.
Například , Thread.sleep (1000);
Výše uvedené volání funguje v kontextu aktuálního vlákna a přepne aktuální vlákno do režimu spánku. Metodu nikdy nevoláme pomocí konkrétní instance vlákna. Metoda je tedy statická.
Závěr
V tomto tutoriálu jsme diskutovali metodu vláken (sleep) v Javě. Metoda Sleep () způsobí, že aktuální podproces, který se provádí, zastaví jeho provádění po stanovenou dobu, která je poskytována jako argument k metodě spánku.
mobilní testovací otázky a odpovědi pro zkušené
Plánovač systému pracuje s metodou spánku, aby dal aktuální vlákno do stavu čekání. Zatímco vlákno spí, nadále vlastní zámky nebo monitory, které získalo. Když předáme záporné hodnotě doby spánku metodě spánku, vyvolá to „IllegalArgumentException“.
Když předáme platnou hodnotu doby spánku metodě sleep (), ostatní vlákna se budou spouštět, zatímco aktuální vlákno spí.
=> Chcete-li vidět A-Z výukových kurzů Java zde, podívejte se sem.
Doporučené čtení
- Multithreading v Javě - výuka s příklady
- Vícevláknové zpracování v C ++ s příklady
- Synchronizace Java: Co je synchronizace vláken v Javě
- Java vlákna s metodami a životním cyklem
- Výukový program Java String | Metody řetězců Java s příklady
- Jak používat metodu Java toString?
- TreeMap v Javě - výuka s příklady Java TreeMap
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video