Ce este BlockingQueue în Java și cum se poate implementa?



Acest articol despre BlockingQueue în Java vă va ajuta să aflați despre interfața BlockingQueue. De asemenea, vă va oferi informații despre metodele sale și implementarea practică

este extrem de popular în rândul programatorilor datorită gamei sale complete de caracteristici încorporate. De cele mai multe ori veți avea o soluție dedicată pentru problema dvs. chiar înainte de a apărea. O astfel de parte extrem de utilă și importantă din este interfața BlockingQueue în Java. Prin intermediul acestui articol, voi arunca o lumină asupra BlockingQueue în Java și metodele de implementare a acestuia.

Mai jos sunt subiectele tratate în acest articol:





Interfață BlockingQueue în Java

BlockingQueue în Java este o interfață care a fost adăugată în Java 1.5 împreună cu alte câteva clase de utilitare concurente, cum ar fi ConcurrentHashMap, CopyOnWriteArrrayList etc. Interfața BlockingQueue aparține java.util.concurrent pachet .Această interfață îmbunătățește controlul fluxului prin activarea blocării, în cazul în care un thread încearcă să scoată din coadă o coadă goală sau să coadă o coadă completă. În ambele cazuri, această interfață este utilă.În termeni mai simpli, să presupunem că a încearcă să adauge elemente într-o coadă deja completă. În acest moment al programului, se va invoca BlockingQueue care va bloca acel fir special până când un alt fir eliberează coada pentru a face spațiu. Acest lucru poate fi rezultatul fie stingerii unui element sau elementelor de degajare a întregii cozi. În mod similar, BlockingQueue va fi invocat pentru a bloca un fir care încearcă să stoarce o coadă deja goală până când un alt fir introduce sau adaugă un element în gol coadă .

În timp ce lucrați cu interfața BlockingQueue în Java, trebuie să vă amintiți că nu acceptă o valoare nulă. În cazul în care încercați să faceți acest lucru, va arunca instantaneu o excepție NullPointerException. Figura de mai jos reprezintă funcționarea interfeței BlockingQueue în Java.



BlockingQueue - BlockingQueue în Java - EdurekaAcest interfață este utilizat în principal între producători-consumatori, deoarece este sigur pentru fire.Ceea ce vreau să spun este că interfața BlockingQueue poate fi utilizată pentru a crea o coadă care poate fi partajată atât de producător, cât și de consumator

Pentru a lucra cu BlockingQueue în Java, mai întâi, trebuie să vă familiarizați cu tipurile sale. Permiteți-mi să vă prezint în secțiunea următoare a acestui articol.

Tipuri de constructori pentru BlockingQueue în Java

Există două tipuri de constructori pentru interfața BlockingQueue în Java:



  • Coadă nelimitată: Pentru acest tip de coadă, capacitatea va fi setată la Integer.MAX_VALUE. O coadă nelimitată nu va fi blocată niciodată, deoarece poate crește dinamic, de fiecare dată când un element este inserat în ea. Mai jos este sintaxa pentru a crea o coadă nelimitată:
BlockingQueue bq = new LinkedBlockingDeque ()
  • Coadă delimitată: Pentru acest tip de coadă, trebuie să treceți capacitatea cozii la momentul creării sale, adică ca constructor parametru. Odată ce dimensiunea este alocată, aceasta nu poate fi modificată. Mai jos este sintaxa pentru a crea o coadă mărginită:
BlockingQueue bq = new LinkedBlockingDeque (10)

Acum, că sunteți familiarizat cu modalitățile de implementare a BlockingQueue în Java, permiteți-mi să enumăr câteva dintre metodele sale.

Metode în interfața BlockingQueue

Metodă Descriere
add boolean (E e) Această metodă ajută la inserarea elementului specificat în această coadă dacă există spațiu în coadă, altfel va fiarunca oIllegalStateException
boolean conține (Obiectul o) Această metodă returnează adevărat dacă coada conține elementul specificat
int drainTo (Colecția c) Această metodă va elimina toate elementele disponibile din coadă și le va adăuga la colecția specificată
int drainTo (Colecția c, int maxElements) Această metodă va elimina din numărul de elemente disponibile din coadă și le va adăuga în cele specificate
oferta booleană (E e) Această metodă va insera elementul specificat în coadă dacă nu este plin și returnează true, altfel va returna false
oferta booleană (E e, expirare lungă, unitate TimeUnit) Această metodă va insera elementul specificat în coadă. În cazul în care coada este plină, va aștepta până la timpul de așteptare specificat pentru ca spațiul să devină disponibil.
Sondaj E (expirare lungă, unitate TimeUnit) Această metodă ajută la recuperarea și eliminarea capului cozii. În cazul în care coada este goală, va aștepta până la timpul de așteptare specificat pentru ca un element să devină disponibil
gol nul (E e) Această metodă va insera elementul specificat în coadă așteptând ca spațiul să devină disponibil n cazul în care coada este plină
în capacitatea rămasă () Această metodă ajută la returnarea numărului de elemente suplimentare pe care această coadă le poate accepta în mod ideal, fără a fi blocate
eliminare booleană (Obiectul o) Această metodă va elimina o singură instanță a elementului specificat din coadă numai dacă este prezent
E take () Această metodă va ajuta la recuperarea și eliminarea capului cozii prin așteptarea ca un element să devină disponibil, în cazul în care coada este goală.

Implementări BlockingQueue

Aici voi implementa un exemplu simplu de BlockingQueue în Java undeclasa EduProducer va genera datele și le va introduce într-un coadă , simultan, o altă clasă, EduConsumer va elimina datele din aceeași coadă.

Pentru aceasta voi crea 3 clase și anume:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Să creăm acum fiecare dintre aceste clase una câte una.

EduProducer.java

pachet edureka import java.util.concurrent.BlockingQueue public class EduProducer implementes Runnable {private final BlockingQueue coada @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () aruncă InterruptedException {// Puneți 10 ints în Coadă pentru (int i = 0 i<10 i++) { System.out.println('[Producer] Add : ' + i) queue.put(i) System.out.println('[Producer] Queue's Remaining Capacity : ' + queue.remainingCapacity()) Thread.sleep(150) } } public EduProducer(BlockingQueue queue) { this.queue = queue } }

EduConsumer.java

ce este clasa pojo în java
pachet edureka import java.util.concurrent.BlockingQueue public class EduConsumer implements Runnable {private final BlockingQueue queue @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} proces privat de nulitate (Integer take) aruncă InterruptedException {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (coadă BlockingQueue) {this.queue = queue}}

EdurekaMain.java

pachet edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue public class EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) thread nou (nou EduProducer (coadă)) .start () fir nou (nou EduConsumer (coadă)). start ()}}

Odată ce ați terminat de scris codul, executați programul pentru a obține rezultatul de mai jos:

[Producător] Adăugare: 0 [Consumator] Preluare: 0 [Producător] Capacitate rămasă a cozii: 9 [Producător] Adăugare: 1 [Producător] Capacitate rămasă a cozii: 9 [Producător] Adăugare: 2 [Producător] Capacitate rămasă a cozii: 8 [Producător ] Adăugați: 3 [Producător] Capacitate rămasă a cozii: 7 [Consumator] Ia: 1 [Producător] Adăugați: 4 [Producător] Capacitate rămasă a cozii: 7 [Producător] Adăugați: 5 [Producător] Capacitate rămasă a cozii: 6 [Producător] Adăugați : 6 [Producător] Capacitate rămasă a cozii: 5 [Consumator] Ia: 2 [Producător] Adăugare: 7 [Producător] Capacitate rămasă a cozii: 5 [Producător] Adăugare: 8 [Producător] Capacitate rămasă a cozii: 4 [Producător] Adăugare: 9 [Producător] Capacitatea rămasă a cozii: 3 [Consumator] Luare: 3 [Consumator] Luare: 4 [Consumator] Luare: 5 [Consumator] Luare: 6 [Consumator] Luare: 7 [Consumator] Luare: 8 [Consumator] Luare: 9

Acest lucru ne aduce la sfârșitul acestui articol despre BlockingQueue în Java. Dacă doriți să învățați Java mai detaliat, vă puteți referi la de asemenea.

Acum că ați înțeles elementele de bază ale BlockingQueue în Java, consultați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru studenți și profesioniști care doresc să fie dezvoltator Java. Cursul este conceput pentru a vă oferi un început important în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestei „BlockingQueue în Java” și vă vom contacta cât mai curând posibil.