Kaj je BlockingQueue v Javi in ​​kako jo uporabiti?



Ta članek o BlockingQueue v Javi vam bo pomagal spoznati vmesnik BlockingQueue. Prav tako vam bo dala vpogled v njegove metode in praktično izvajanje

je izjemno priljubljen med programerji zaradi obsežne palete vgrajenih funkcij. V večini primerov boste imeli posebno težavo za svojo težavo, še preden se pojavi. Tako izredno koristen in pomemben del je vmesnik BlockingQueue v Javi. Skozi medij tega članka bom osvetlil BlockingQueue v Javi in ​​metode za njegovo izvajanje.

Spodaj so teme, zajete v tem članku:





php pretvori niz v matriko

BlockingQueue vmesnik v Javi

BlockingQueue v Javi je vmesnik, ki je bil dodan v Javi 1.5 skupaj z nekaj drugimi sočasnimi razredi pripomočkov, kot so ConcurrentHashMap, CopyOnWriteArrrayList itd. Vmesnik BlockingQueue pripada java.util.concurrent paket .Ta vmesnik izboljšuje nadzor pretoka z aktiviranjem blokiranja, če poskuša nit izprazniti prazno vrsto ali uvrstiti celotno vrsto. V obeh primerih je ta vmesnik priročen.Recimo preprosteje, a poskuša dodati elemente v že polno čakalno vrsto. Na tej točki v programu se bo sprožila BlockingQueue, ki bo blokirala to nit, dokler druga nit ne sprosti čakalne vrste, da bo naredila prostor. To je lahko rezultat bodisi izpraznitve elementa (-ov) iz razmaka celotne čakalne vrste. Podobno se sproži BlockingQueue, da blokira nit, ki poskuša izprazniti že prazno čakalno vrsto, dokler se v prazno ne vstavi druga nit ali doda element v prazno čakalna vrsta .

Med delom z vmesnikom BlockingQueue v Javi ne pozabite, da ne sprejema ničelne vrednosti. Če poskusite to storiti, bo takoj vrgel NullPointerException. Spodnja slika predstavlja delovanje vmesnika BlockingQueue v Javi.



BlockingQueue - BlockingQueue v Javi - EdurekaTo vmesnik se večinoma uporablja med proizvajalci in potrošniki, saj je varen za nit.Mislim, da je vmesnik BlockingQueue mogoče uporabiti za ustvarjanje čakalne vrste, ki jo lahko delita tako proizvajalec kot potrošnik

Za delo z BlockingQueue v Javi se morate najprej seznaniti z njegovimi vrstami. Naj vam jih predstavim v naslednjem poglavju tega članka.

Vrste konstruktorjev za BlockingQueue v Javi

Obstajajo dve vrsti konstruktorjev za vmesnik BlockingQueue v Javi:



  • Neomejena čakalna vrsta: Za to vrsto čakalne vrste bo zmogljivost nastavljena na Integer.MAX_VALUE. Neomejena čakalna vrsta se ne bo nikoli blokirala, saj lahko dinamično raste vsakič, ko vanjo vstavite element. Spodaj je sintaksa za ustvarjanje neomejene čakalne vrste:
BlockingQueue bq = novo LinkedBlockingDeque ()
  • Omejena vrsta: Za to vrsto čakalne vrste morate prenesti zmogljivost čakalne vrste v času njenega ustvarjanja, tj. gradbenik parameter. Ko je velikost dodeljena, je ni več mogoče spremeniti. Spodaj je sintaksa za ustvarjanje omejene čakalne vrste:
BlockingQueue bq = novo LinkedBlockingDeque (10)

Zdaj, ko ste seznanjeni z načini za izvajanje BlockingQueue v Javi, naj navedem nekaj njenih metod.

Metode v vmesniku BlockingQueue

Metoda Opis
logični dodatek (E e) Ta metoda pomaga pri vstavljanju določenega elementa v to čakalno vrsto, če je v čakalni vrsti prostor, sicer bovrziIllegalStateException
logična vrednost vsebuje (predmet o) Ta metoda vrne true, če vrsta vsebuje navedeni element
int drainTo (Zbirka c) Ta metoda bo iz čakalne vrste odstranila vse razpoložljive elemente in jih dodala v določeno zbirko
int drainTo (Zbirka c, int maxElements) Ta metoda bo iz čakalne vrste odstranila določeno število razpoložljivih elementov in jih dodala v navedene
booloean ponudba (E e) Ta metoda bo v čakalni vrsto vstavila navedeni element, če ni poln in vrne true, sicer pa vrne false
logična ponudba (E e, dolga časovna omejitev, enota TimeUnit) Ta metoda bo v čakalni vrsti vstavila navedeni element. Če je čakalna vrsta polna, bo počakala do določenega čakalnega časa, da bo prostor na voljo.
E anketa (dolga časovna omejitev, enota TimeUnit) Ta metoda pomaga pri pridobivanju in odstranjevanju glave čakalne vrste. Če je čakalna vrsta prazna, bo počakal do določenega čakalnega časa, da bo element na voljo
praznina (E e) Ta metoda bo v čakalni vrsti vstavila navedeni element tako, da bo čakala, da bo na voljo prostor, če bo čakalna vrsta polna
int preostala zmogljivost () Ta metoda pomaga pri vrnitvi števila dodatnih elementov, ki jih ta čakalna vrsta v idealnem primeru lahko sprejme, ne da bi jih blokirali
logično odstranjevanje (objekt o) Ta metoda bo iz čakalne vrste odstranila en primerek določenega elementa samo, če je prisoten
E vzemite () Ta metoda bo pomagala pri pridobivanju in odstranjevanju glave čakalne vrste s čakanjem, da bo element na voljo, če je vrsta prazna.

Izvedbe BlockingQueue

Tukaj bom izvedel preprost primer BlockingQueue v Javi, kjerrazred EduProducer bo generiral podatke in jih vstavil v čakalna vrsta , hkrati bo drug razred EduConsumer odstranil podatke iz iste čakalne vrste.

Za to bom ustvaril 3 razrede, in sicer:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Ustvarimo zdaj vsakega od teh razredov enega za drugim.

EduProducer.java

paket edureka import java.util.concurrent.BlockingQueue javni razred EduProducer implementira Runnable {private final BlockingQueue queue @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () vrže InterruptedException {// Vstavi 10 intov v čakalno vrsto za (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

paket edureka uvoz java.util.concurrent.BlockingQueue javni razred EduConsumer izvaja Runnable {zasebni končni BlockingQueue vrsta @Override javna void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} zasebni postopek void (Integer take) vrže InterruptedException {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (čakalna vrsta BlockingQueue) {this.queue = queue}}

EdurekaMain.java

paket edureka import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue javni razred EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (queue) .start () nova nit (nova EduConsumer (čakalna vrsta)). start ()}}

Ko končate s pisanjem kode, zaženite program, da dobite spodnji izhod:

[Producent] Dodaj: 0 [Potrošnik] Vzemi: 0 [Producent] Preostala zmogljivost čakalne vrste: 9 [Producent] Dodaj: 1 [Producent] Preostala zmogljivost čakalne vrste: 9 [Proizvajalec] Dodaj: 2 [Producent] Preostala zmogljivost čakalne vrste: 8 [Producent ] Dodaj: 3 [Producent] Preostala zmogljivost čakalne vrste: 7 [Potrošnik] Vzemi: 1 [Producent] Dodaj: 4 [Predelovalna zmogljivost] Čakalne vrste: 7 [Proizvajalec] Dodaj: 5 [Producent] Preostala zmogljivost čakalne vrste: 6 [Proizvajalec] Dodaj : 6 [Predelovalna zmogljivost čakalne vrste]: 5 [Potrošnik] Vzemi: 2 [Producent] Dodaj: 7 [Predelovalna zmogljivost] Čakalne vrste: 5 [Proizvajalec] Dodaj: 8 [Producent] Preostala zmogljivost čakalne vrste: 4 [Proizvajalec] Dodaj: 9 [Producent] Preostala zmogljivost čakalne vrste: 3 [Potrošnik] Vzemite: 3 [Potrošnik] Vzemite: 4 [Potrošnik] Vzemite: 5 [Potrošnik] Vzemite: 6 [Potrošnik] Vzemite: 7 [Potrošnik] Vzemite: 8 [Potrošnik] Vzemite: 9

S tem smo prišli do konca tega članka o BlockingQueue v Javi. Če se želite podrobneje naučiti Jave, se lahko obrnete na našo prav tako.

Zdaj, ko ste razumeli osnove BlockingQueue v Javi, si oglejte Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, razširjenih po vsem svetu. Edurekin tečaj za usposabljanje in certificiranje Java J2EE in SOA je namenjen študentom in strokovnjakom, ki želijo biti razvijalec Java. Tečaj je zasnovan tako, da vam omogoči uvod v programiranje Java in vas usposobi za temeljne in napredne koncepte Java, skupaj z različnimi Java okviri, kot so Hibernate & Spring.

spletna aplikacija ruby ​​on rails

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje te 'BlockingQueue v Javi', mi se vam bomo javili v najkrajšem možnem času.