Jak implementovat rozhraní BlockingQueue v Javě



Tento článek vám poskytne podrobné a komplexní znalosti o tom, jak implementovat rozhraní BlockingQueue v jazyce Java.

Fronta je důležitým aspektem jakéhokoli programovacího jazyka. Zvlášť, když mluvíme o . V tomto článku probereme rozhraní BlockingQueue v Javě v následujícím pořadí:

Co je rozhraní BlockingQueue v Javě?

Rozhraní BlockingQueue v Javě je fronta, která se blokuje, když se z ní pokusíte vyřadit a fronta je prázdná, nebo pokud se pokusíte do ní zařadit položky a fronta je již plná. Vlákno, které se pokouší vyřadit z prázdné fronty, je blokováno, dokud nějaké jiné vlákno nevloží položku do fronty. Vlákno, které se pokouší zařadit položku do celé fronty, je blokováno, dokud některé jiné vlákno nevytvoří místo ve frontě, a to buď zrušením pořadí jedné nebo více položek, nebo úplným vymazáním fronty.





prioritní fronta v c ++

Rozhraní BlockingQueue v Javě nepřijímánulahodnoty a hodNullPointerExceptionpokud se pokusíte uložit hodnotu null do fronty.Implementace Java BlockingQueue jsou bezpečné pro vlákna . Všechny metody řazení do fronty mají atomovou povahu a používají vnitřní zámky nebo jiné formy řízení souběžnosti.



Diagram tříd fronty Java

Rozhraní Java Queue rozšiřuje rozhraní Collection. Rozhraní kolekce rozšiřuje rozhraní Iterable. Některé z často používaných tříd implementace Queue jsou LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,atd. AbstractQueue poskytuje základní implementaci rozhraní fronty, aby se snížilo úsilí při implementaci fronty.

Typy blokování fronty

BlockingQueue jsou dva typy:



  • Neomezená fronta: Kapacita blokující fronty bude nastavena na Integer.MAX_VALUE. V případě neomezené blokující fronty nebude fronta nikdy blokována, protože by mohla narůst na velmi velkou velikost. když přidáte prvky, jeho velikost roste.

Syntax:
Blokovací fronta BlockingQueue = nová LinkedBlockingDeque ()

  • Ohraničená fronta: Druhým typem fronty je ohraničená fronta. V případě ohraničené fronty můžete vytvořit frontu tak, že obejdete kapacitu fronty v konstruktoru front:
    Syntax:
    // Vytvoří blokující frontu s kapacitou 5

Blokovací fronta BlockingQueue = nová LinkedBlockingDeque (5)

Metody v rozhraní BlockingQueue

Změnit typ Syntaxe metody Používá Popis
booleovský přidat (E a) Vložení

Vloží zadaný prvek do této fronty, pokud je to možné provést okamžitě, aniž by došlo k porušení omezení kapacity, vrácení true po úspěchu a vyvolání výjimky IllegalStateException, pokud aktuálně není k dispozici žádný prostor.

booleovský obsahuje (Objekt o) Prozkoumat

Vrátí true, pokud tato fronta obsahuje zadaný prvek.

int drainTo (kolekce c) Načítání nebo odebrání

Odebere všechny dostupné prvky z této fronty a přidá je do dané kolekce.

int drainTo (Collection c, int maxElements) Načítání nebo odebrání

Odebere maximálně daný počet dostupných prvků z této fronty a přidá je do dané kolekce.

booleovský nabídka (E a) Vložení

Vloží zadaný prvek do této fronty, pokud je to možné provést okamžitě bez porušení omezení kapacity, vrací true při úspěchu a false, pokud aktuálně není k dispozici žádný prostor.

booleovský nabídka (E e, long timeout, jednotka TimeUnit) Vložení

Vloží zadaný prvek do této fronty a v případě potřeby čeká až do zadaného čekacího času, než bude k dispozici místo.

JE hlasování (dlouhý časový limit, jednotka TimeUnit) Načítání nebo odebrání

Načte a odebere záhlaví této fronty a v případě potřeby čeká na zadanou dobu čekání, než bude prvek k dispozici.

prázdnota dát (E e) Vložení

Vloží zadaný prvek do této fronty, v případě potřeby čeká na uvolnění místa.

int zbývající kapacita () Prozkoumat

Vrátí počet dalších prvků, které může tato fronta v ideálním případě (při absenci omezení paměti nebo prostředků) přijmout bez blokování, nebo Integer.MAX_VALUE, pokud neexistuje žádný vnitřní limit.

booleovský remove (Object o) + Načítání nebo odebrání

Odebere jednu instanci zadaného prvku z této fronty,pokud je přítomen.

JE vzít() Načítání nebo odebrání

Načte a odebere záhlaví této fronty, v případě potřeby počká, dokud nebude prvek k dispozici.

Rozhraní BlockingQueue v Javě Příklad: Služba

balíček com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue veřejná třída ProducerConsumerService {public static void main (String [] args) {// Creating BlockingQueue of size 10 BlockingQueue queue = new ArrayBlockingQueue 10) Producent producent = nový Producent (fronta) Spotřebitel spotřebitel = nový Spotřebitel (fronta) // začínající producent produkovat zprávy ve frontě new Thread (producer) .start () // začínající spotřebitel spotřebovávat zprávy z fronty new Thread (spotřebitel) .start () System.out.println ('Producent and Consumer has been started')}}

S tímto se dostáváme na konec článku BlockingQueue Interface in Java. Doufám, že všechny vaše koncepty jsou nyní jasné.

Podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Výukové a certifikační kurzy Edureka Java J2EE a SOA jsou určeny pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými rámci Java, jako je Hibernate & Spring.

is a má javu

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v tomto blogu „BlockingQueue Interface in Java“ a my se vám ozveme co nejdříve.