Rozdíl mezi spánkem a čekáním v Javě

Obsah:

Rozdíl mezi spánkem a čekáním v Javě
Rozdíl mezi spánkem a čekáním v Javě

Video: Rozdíl mezi spánkem a čekáním v Javě

Video: Rozdíl mezi spánkem a čekáním v Javě
Video: What is difference between sleep, yield and wait method ? || Java Concurrency Interview Question 2024, Listopad
Anonim

Klíčový rozdíl – spánek vs. čekání v Javě

Spánek a čekání jsou dvě metody používané pro multithreading v Javě. Metoda spánku patří do třídy Thread, zatímco metoda čekání je z třídy Object. Klíčový rozdíl mezi spánkem a čekáním v Javě je ten, že spánek se používá k pozastavení provádění aktuálního vlákna na zadaný počet milisekund, zatímco metoda čekání se používá k tomu, aby aktuální vlákno čekalo, dokud jiné vlákno nevyvolá oznámení nebo metoda notifyAll pro objekt.

Vlákno je nejmenší jednotka zpracování v operačním systému. Jedná se o jeden sekvenční tok řízení v rámci programu. Nitě jsou lehké. Multithreading je mechanismus spouštění více vláken současně. Programovací jazyky jako Java podporují multithreading. Multithreading má výhody, protože umožňuje spouštět více vláken současně a vlákna jsou na sobě nezávislá. V Javě existují metody, které lze použít pro multithreading. Dva z nich spí a čekají.

Co je spánek v Javě?

V operačním systému běží několik procesů. Proces je spuštěný program. Každý proces může mít více vláken a mezi těmito vlákny dochází k přepínání kontextu. V Javě existují dva způsoby, jak vytvořit vlákno. To znamená rozšířením třídy vláken nebo implementací rozhraní Runnable. Třída Thread má konstruktory a metody pro vytváření a provádění operací s vláknem. Třída Thread rozšiřuje třídu Object a implementuje rozhraní Runnable. Rozhraní Runnable by mělo být implementováno jakoukoli třídou, jejíž instance mají být spouštěny vláknem. Když se vlákno spustí, kód, který by se měl spustit, se zapíše do metody run. Vlákno, které by se mělo spustit, je vybráno plánovačem vláken. V jednom procesu běží pouze jedno vlákno.

Vlákno prochází několika fázemi. Po vytvoření objektu třídy Thread může programátor vyvolat metodu start. Před vyvoláním této metody se říká, že vlákno je v novém stavu. Plánovač vláken vybere vlákno, které se má spustit. Pokud podproces ještě není vybrán plánovačem podprocesů, ale je vyvolána metoda spuštění, pak je podproces ve spustitelném stavu. Poté, co plánovač vláken vybere vlákno ke spuštění, přejde do stavu běhu. Pokud je vlákno aktivní, ale není aktuálně způsobilé ke spuštění, pak je ve stavu nespustitelném nebo blokovaném. Po dokončení metody běhu vlákno přejde do ukončeného stavu. To jsou hlavní fáze životního cyklu vlákna.

Ve třídě vláken jsou k dispozici různé metody pro provádění různých úloh. Metoda spánku se používá k uspání metody po určitou dobu. Syntaxe pro metodu spánku je public void sleep (dlouhé milisekundy) vyvolá InterruptedException. To způsobí, že aktuálně spouštěné vlákno dočasně zastaví provádění na zadaný počet milisekund. Pokud jiné vlákno přeruší aktuální vlákno, stav přerušení aktuálního vlákna se při vyvolání této výjimky vymaže.

Rozdíl mezi spánkem a čekáním v Javě
Rozdíl mezi spánkem a čekáním v Javě

Obrázek 01: Program Java s metodou spánku

Podle výše uvedeného programu metoda run obsahuje kód, který by měl být proveden. V hlavním programu jsou vytvořeny dva objekty ExampleThread1 a na nich jsou vyvolány metody spuštění. To umožní spustit kód uvnitř metody run. Najednou se spustí pouze jedno vlákno. S nití.spánek (1000); umožní prvnímu vláknu ukončit provádění na 1000 milisekund. Když vlákno spí, plánovač vláken převezme druhé vlákno.

Co je to čekání v Javě?

K sdílenému zdroji může přistupovat více vláken. Může způsobit generování nesprávného výstupu. Synchronizaci vláken lze použít k vytvoření pouze jednoho vlákna pro přístup ke sdílenému prostředku. Předpokládejme následující situaci. Pokud existují dvě vlákna jako t1 a t2, t1 začne ukládat hodnoty do textového souboru s názvem Text1.txt. Tyto hodnoty budou použity pro nějaký další výpočet, když se vrátí t1. Pokud t2 začne dříve, než se vrátí t1, t2 může změnit hodnoty uložené t1. To může způsobit, že t1 poskytne nesprávný výstup. S pomocí synchronizace, když t1 začne používat soubor Text1.txt, lze tento soubor uzamknout, takže je přístupný pouze pro t1. t2 to nemůže změnit, dokud t1 neuvolní zámek pro přístup k tomuto textovému souboru. Když je úkol dokončen, t1 může uvolnit zámek. Zámek je také známý jako monitor.

Synchronizaci vláken lze dosáhnout komunikací mezi vlákny. Kritická sekce je segment kódu, který přistupuje ke sdíleným zdrojům. Při komunikaci mezi vlákny je běh vlákna pozastaven ve své kritické sekci a další vlákno může vstoupit do stejné kritické sekce, aby bylo spuštěno. Je implementován pomocí metod wait, notify a notifyAll. Patří do třídy Object. Metoda čekání se používá, aby umožnila aktuálnímu vláknu uvolnit zámek a počkat, dokud jiné vlákno nevyvolá pro objekt metodu notify nebo notifyAll. Metoda notify se používá k probuzení jednoho vlákna, které čeká na zámek. NotifyAll probudí všechna vlákna, která čekají na zámku.

Rozdíl mezi spánkem a čekáním v Java_Figure 02
Rozdíl mezi spánkem a čekáním v Java_Figure 02

Obrázek 02: Třída kalkulačky

Klíčový rozdíl mezi spánkem a čekáním v Javě
Klíčový rozdíl mezi spánkem a čekáním v Javě

Obrázek 03: Hlavní metoda

Třída Kalkulačka rozšiřuje vlákno. Synchronizovaný blok je uvnitř metody běhu. Smyčka for a metoda oznámení jsou uvnitř synchronizovaného bloku. Uvnitř hlavní metody je vytvořena instance vlákna a v této instanci je volána metoda start. Hlavní metoda počká, až vlákno vydá upozornění. Při spouštění programu hlavní metoda čeká na celé provedení metody run a čeká na metodu notify. Jakmile je zavolána metoda notify, hlavní metoda přestane čekat a začne provádět zbytek kódu. Main čeká na dokončení vlákna kalkulačky. Nakonec se vytiskne výsledek součtu.

Pokud neexistuje žádný synchronizovaný blok a pokud má hlavní metoda kód, jak je uvedeno níže, bude výstup nulový, protože nečeká na dokončení druhého vlákna.

Kalkulačka t1=nová kalkulačka ();

t1. start ();

System.out.println (t1.sum);

Jaká je podobnost mezi spánkem a čekáním v Javě?

Spánek i čekání jsou metody, které lze použít při implementaci multithreadingu v Javě

Jaký je rozdíl mezi spánkem a čekáním v Javě?

spánek vs čekání v Javě

Metoda spánku způsobí, že aktuální vlákno pozastaví provádění na určený počet milisekund, v závislosti na přesnosti a přesnosti systémových časovačů a plánovačů. Metoda čekání způsobí, že aktuální vlákno počká, dokud jiné vlákno nevyvolá pro objekt metodu notify nebo notifyAll.
Asociace se zámkem
Metoda spánku neuvolní zámek na objektu během synchronizace. Metoda čekání uvolní zámek během synchronizace.
Způsob provedení
Metoda spánku je spuštěna v aktuálním vláknu. Na objektu je volána metoda čekání.
Přidružená třída
Spánek je metoda třídy Thread. Čekání je metoda třídy Object.
Dokončení
Proces spánku je dokončen po uplynutí stanovené doby. Metoda čekání je přerušena voláním metod notify nebo notifyAll.

Shrnutí – spánek vs čekání v Javě

V operačním systému běží několik procesů. Každý proces může mít více vláken. Vlákno je nejmenší jednotka zpracování v operačním systému. Programovací jazyk Java podporuje multithreading. Umožňuje běh více vláken současně. Spánek a čekání jsou dvě metody, které lze použít při implementaci multi-threadingu. Rozdíl mezi režimem spánku a čekáním v Javě spočívá v tom, že režim spánku se používá k pozastavení provádění aktuálního vlákna na zadaný počet milisekund, zatímco metoda čekání se používá k tomu, aby aktuální vlákno čekalo, dokud jiné vlákno nevyvolá oznámení nebo notifyAll. metoda pro objekt.

Doporučuje: