Ako implementovať rozhranie BlockingQueue v Jave



Tento článok vám poskytne podrobné a komplexné vedomosti o tom, ako implementovať rozhranie BlockingQueue v jazyku Java.

Poradie je dôležitým aspektom každého programovacieho jazyka. Najmä ak hovoríme o . V tomto článku sa budeme zaoberať rozhraním BlockingQueue v prostredí Java v nasledujúcom poradí:

Čo je to rozhranie BlockingQueue v Jave?

Rozhranie BlockingQueue v Jave je front, ktorý sa zablokuje, keď sa z neho pokúsite vyradiť a fronta je prázdna, alebo ak sa do nej pokúsite zaradiť položky a front je už plný. Vlákno, ktoré sa pokúša vyradiť z prázdneho frontu, je blokované, kým nejaké iné vlákno nevloží položku do frontu. Vlákno, ktoré sa pokúša zaradiť položku do úplného poradia, je blokované, kým nejaké iné vlákno neuvoľní miesto vo fronte, a to buď odstránením jednej alebo viacerých položiek z frontu, alebo úplným vyčistením frontu.





prioritný rad v c ++

Rozhranie BlockingQueue v prostredí Java neprijímanulovýhodnoty a hodNullPointerExceptionak sa pokúsite uložiť nulovú hodnotu do frontu.Implementácie Java BlockingQueue sú bezpečné pre vlákna . Všetky metódy čakania v rade sú atómovej povahy a využívajú vnútorné zámky alebo iné formy riadenia súbežnosti.



Diagram tried frontu Java

Rozhranie Java Queue rozširuje rozhranie Collection. Rozhranie kolekcie rozširuje vymeniteľné rozhranie. Niektoré z často používaných tried implementácie frontu sú LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,atď. AbstractQueue poskytuje skeletovú implementáciu rozhrania frontu, aby sa znížilo úsilie pri implementácii frontu.

Typy blokovania fronty

BlockingQueue sú dva typy:



  • Neohraničený front: Kapacita blokujúceho frontu bude nastavená na Integer.MAX_VALUE. V prípade neobmedzeného frontu blokovania sa front nikdy nebude blokovať, pretože by mohol narásť do veľmi veľkej veľkosti. keď pridáte prvky, jeho veľkosť rastie.

Syntax:
Fronta na blokovanie fronty blokovania = nová LinkedBlockingDeque ()

  • Ohraničený rad: Druhým typom frontu je ohraničený front. V prípade ohraničeného frontu môžete vytvoriť front obchádzaním kapacity frontu v konštruktore frontov:
    Syntax:
    // Vytvorí blokujúci blok s kapacitou 5

Fronta blokovania blokujúcej fronty = nový LinkedBlockingDeque (5)

Metódy v rozhraní BlockingQueue

Zmeniť typ Syntax metódy Používa Popis
boolovský pridať (E a) Vloženie

Vloží zadaný prvok do tohto frontu, ak je to možné urobiť okamžite bez porušenia kapacitných obmedzení, po úspechu sa vráti true a vyvolá IllegalStateException, ak momentálne nie je k dispozícii miesto.

boolovský obsahuje (Objekt o) Preskúmajte

Vráti hodnotu true, ak tento front obsahuje zadaný prvok.

int drainTo (kolekcia c) Získanie alebo odstránenie

Odstráni všetky dostupné prvky z tohto poradia a pridá ich do danej kolekcie.

int drainTo (kolekcia c, int maxElements) Získanie alebo odstránenie

Odstráni z danej fronty najviac daný počet dostupných prvkov a pridá ich do danej kolekcie.

boolovský ponuka (E a) Vloženie

Vloží zadaný prvok do tohto frontu, ak je to možné urobiť okamžite bez porušenia kapacitných obmedzení. Vráti hodnotu true pri úspechu a hodnotu false, ak momentálne nie je k dispozícii miesto.

boolovský ponuka (E e, long timeout, jednotka TimeUnit) Vloženie

Vloží zadaný prvok do tohto frontu a v prípade potreby počká až do určeného času čakania, kým bude k dispozícii miesto.

JE hlasovanie (dlhý časový limit, jednotka TimeUnit) Získanie alebo odstránenie

Načíta a odstráni hlavičku tohto poradia a v prípade potreby počká na zadaný čas čakania, kým bude prvok k dispozícii.

neplatný put (E e) Vloženie

Vloží zadaný prvok do tohto poradia, v prípade potreby počká, kým nebude k dispozícii miesto.

int zostávajúca kapacita () Preskúmajte

Vráti počet ďalších prvkov, ktoré tento front môže v ideálnom prípade (pri absencii obmedzení pamäte alebo zdrojov) prijať bez blokovania, alebo Integer.MAX_VALUE, ak neexistuje vnútorný limit.

boolovský remove (Objekt o) + Získanie alebo odstránenie

Odstráni jednu inštanciu zadaného prvku z tohto frontu,ak je prítomný.

JE vziať () Získanie alebo odstránenie

Načíta a odstraňuje hlavičku tohto poradia, v prípade potreby počká, kým nebude k dispozícii nejaký prvok.

Rozhranie BlockingQueue v jazyku Java Príklad: Služba

balíček com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue verejná trieda ProducerConsumerService {public static void main (String [] args) {// Vytváranie BlockingQueue o veľkosti 10 BlockingQueue queue = new ArrayBlockingQueue 10) Producent producent = nový Producent (fronta) Spotrebiteľský spotrebiteľ = nový Spotrebiteľ (fronta) // začínajúci producent produkovať správy vo fronte new Thread (producer) .start () // začínajúci spotrebiteľ konzumovať správy z frontu new Thread (consumer) .start () System.out.println ('Producent and Consumer has been started')}}

Týmto sa dostávame na koniec článku BlockingQueue Interface in Java. Dúfam, že všetky vaše koncepty sú teraz jasné.

Pozrite sa na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA sú určené pre študentov a profesionálov, ktorí chcú byť vývojármi Java. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi rámcami Java, ako je Hibernate & Spring.

aký je rozdiel medzi css a css3

Máte na nás otázku? Uveďte to, prosím, v sekcii komentárov v tomto blogu „BlockingQueue Interface in Java“ a my sa vám ozveme čo najskôr.