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?
- Typy blokovania fronty
- Metódy v rozhraní BlockingQueue
- Rozhranie BlockingQueue v jazyku Java Príklad: Služba
Č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.
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.