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 ze třídy Object. Klíčový rozdíl mezi spánkem 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 počkalo, dokud jiné vlákno nevyvolá upozornění nebo oznámit metodu pro objekt.
Vlákno je nejmenší jednotka zpracování v operačním systému. Jedná se o jediný postupný tok řízení v rámci programu. Vlákna jsou lehká. Vícevláknový proces je mechanismus spouštění více vláken současně. Programovací jazyky, jako je Java, podporují multithreading. Vícevláknové zpracování má výhody, protože umožňuje spouštět více podprocesů současně a podprocesy jsou na sobě nezávislé. V Javě existují metody, které lze použít pro multithreading. Dva z nich spí a čekají.
OBSAH
1. Přehled a klíčový rozdíl
2. Co je to spánek v Javě
3. Co je čekání v Javě
4. Podobnosti mezi spánkem a čekáním v Javě
5. Porovnání vedle sebe - spánek vs. čekání v Javě ve formě tabulky
6. Shrnutí
Co je to spánek v Javě?
V operačním systému běží více procesů. Proces je provádě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ákna nebo implementací rozhraní Runnable. Třída Thread má konstruktory a metody pro vytváření a provádění operací na vlákně. Třída Thread rozšiřuje třídu Object a implementuje Runnable rozhraní. Rozhraní Runnable by mělo být implementováno jakoukoli třídou, jejíž instance jsou určeny k provedení 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 vlákno říká, že je v novém stavu. Plánovač vláken vybere vlákno, které se má spustit. Pokud vlákno ještě není vybráno plánovačem vláken, ale pokud je vyvolána metoda spuštění, je vlákno ve stavu spustitelnosti. Poté, co plánovač vláken vybere vlákno, které se má provést, přejde do běžícího stavu. Pokud je vlákno naživu, ale aktuálně není způsobilé ke spuštění, je v nespustitelném nebo zablokovaném stavu. Po dokončení metody spuštění přejde vlákno 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 k provádění různých úkolů. Metoda spánku se používá k uspání metody po určitou dobu. Syntaxe metody spánku je public void sleep (dlouhé milisekundy) vyvolá InterruptedException. Způsobí, že aktuálně provádějící vlákno dočasně zastaví provádění po 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.
Obrázek 01: Program Java s metodou spánku
Podle výše uvedeného programu obsahuje metoda spuštění kód, který by měl být spuštěn. V hlavním programu jsou vytvořeny dva objekty ExampleThread1 a jsou na nich vyvolány metody start. To umožní spustit kód uvnitř metody spuštění. Současně se provádí pouze jedno vlákno. Se závitem. spánek (1 000); umožní prvnímu vláknu ukončit provádění po dobu 1000 milisekund. Když vlákno spí, plánovač vláken zvedne druhé vlákno.
Co je čekání v Javě?
Ke sdílenému prostředku může přistupovat více vláken. Může to 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 situaci následovně. Pokud existují dvě vlákna jako t1 a t2, t1 začněte ukládat hodnoty do textového souboru s názvem Text1.txt. Tyto hodnoty budou použity pro nějaký jiný výpočet, když se vrátí t1. Pokud t2 začíná před návratem t1, může t2 změnit hodnoty uložené pomocí 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, může být tento soubor uzamčen, takže je přístupný pouze pro t1. T2 jej nemůže změnit, dokud t1 neuvolní zámek pro přístup k tomuto textovému souboru. Po dokončení úkolu může t1 uvolnit zámek. Zámek se také nazývá monitor.
Synchronizace vláken může být dosažena komunikací mezi vlákny. Kritická část je segment kódu, který přistupuje ke sdíleným prostředkům. V komunikaci mezi vlákny je vlákno pozastaveno a běží ve své kritické části a další vlákno může vstoupit do stejné kritické části, která má být provedena. Implementuje se pomocí metod čekání, upozornění a upozornění. Patří do třídy Object. Metoda čekání se používá k povolení aktuálního vlákna uvolnit zámek a počkat, až jiné vlákno vyvolá metodu oznámit nebo oznámitAll pro objekt. Metoda upozornění se používá k probuzení jediného vlákna, které čeká na zámek. NotifyAll probudí všechna vlákna, která čekají na zámek.
Obrázek 02: Třída kalkulačky
Obrázek 03: Hlavní metoda
Třída Calculator rozšiřuje vlákno. Synchronizovaný blok je uvnitř metody běhu. Metoda for loop and notify je uvnitř synchronizovaného bloku. Uvnitř hlavní metody je v této instanci volána instance vlákna vytvořeného a metoda start. Hlavní metoda počká, dokud vlákno neoznámí. Při provádění programu čeká hlavní metoda na celé provedení spuštěné metody a čeká na metodu upozornění. Jakmile se zavolá metoda upozornění, hlavní metoda přestane čekat a začne provádět zbytek kódu. Main čeká na dokončení podprocesu Calculator. Nakonec se vytiskne výsledek součtu.
Pokud neexistuje žádný synchronizovaný blok a má-li hlavní metoda kód uvedený níže, dá výstup jako nulu, protože nečeká na dokončení druhého vlákna.
Calculator t1 = new Calculator ();
t1. Start ();
System.out.println (t1.sum);
Jaká je podobnost mezi spánkem a čekáním v Javě?
Režim spánku 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ě?
Rozdílný článek uprostřed před tabulkou
spánek vs čekání v Javě |
|
Metoda spánku způsobí, že aktuální vlákno pozastaví provádění po zadaný počet milisekund, s výhradou 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á metodu oznámit nebo oznámitAll pro objekt. |
Sdružení 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 se provádí na aktuálním vlákně. | 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í zadaného času. | Metoda čekání je přerušena voláním metod oznámit nebo notifyAll. |
Shrnutí - spánek vs čekání v Javě
V operačním systému běží více 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ě. Režim spánku a čekání jsou dvě metody, které lze použít při implementaci více vláken. Rozdíl mezi spánkem 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 počkalo, dokud jiné vlákno nevyvolá upozornění nebo upozorněníAll metoda pro objekt.