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ě?
- Typy blokování fronty
- Metody v rozhraní BlockingQueue
- Rozhraní BlockingQueue v Javě Příklad: Služba
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.
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.