Kas yra „BlockingQueue“ sistemoje „Java“ ir kaip ją įgyvendinti?



Šis straipsnis apie „BlockingQueue“ sistemoje „Java“ padės jums sužinoti apie „BlockingQueue“ sąsają. Tai taip pat suteiks jums įžvalgų apie jos metodus ir praktinį įgyvendinimą

yra labai populiarus tarp programuotojų dėl visapusiškų integruotų funkcijų. Dažniausiai turėsite specialų savo problemos sprendimą dar prieš jam pasirodant. Tokia nepaprastai naudinga ir svarbi dalis yra „Java“ sąsaja „BlockingQueue“. Per šį straipsnį aš šiek tiek paaiškinsiu „BlockingQueue“ sistemoje „Java“ ir jos įgyvendinimo metodus.

Toliau pateikiamos šio straipsnio temos:



„BlockingQueue“ sąsaja „Java“

„BlockingQueue“ sistemoje „Java“ yra sąsaja, kuri buvo įtraukta į „Java 1.5“ kartu su keletu kitų tuo pačiu metu teikiamų „Utility“ klasių, tokių kaip „ConcurrentHashMap“, „CopyOnWriteArrrayList“ ir kt. „BlockingQueue“ sąsaja priklauso java.util.sąlyga paketą .Ši sąsaja pagerina srauto valdymą, įjungdama blokavimą, jei gija bando pašalinti tuščią eilę arba surašyti visą eilę. Bet kuriuo atveju ši sąsaja yra naudinga.Paprasčiau tariant, tarkime a bando elementus įtraukti į jau pilną eilę. Šioje programos vietoje bus iškviesta „BlockingQueue“, kuri blokuos tą konkrečią giją, kol kita gija atleis eilę, kad atsirastų vietos. Tai gali atsirasti dėl visos eilės laisvo elemento (-ų) pašalinimo. Panašiai bus iškviečiama „BlockingQueue“, kad būtų užblokuotas siūlas, bandantis panaikinti jau tuščią eilę, kol į tuščią vietą neįtrauks arba pridės elementą eilė .

Dirbdami su „Java“ sąsaja „BlockingQueue“, turite atsiminti, kad ji nepriima jokios vertės. Jei bandysite tai padaryti, tai iškart sukels „NullPointerException“. Žemiau pateiktas paveikslėlis rodo „BlockingQueue“ sąsajos veikimą „Java“.



„BlockingQueue“ - „BlockingQueue“ sistemoje „Java“ - „Edureka“Tai sąsaja daugiausia naudojamas tarp gamintojų ir vartotojų, nes jis yra saugus siūlams.Turiu omenyje, kad sąsają „BlockingQueue“ galima naudoti norint sukurti eilę, kuria gali pasidalinti tiek gamintojas, tiek vartotojas

Norėdami dirbti su „BlockingQueue“ sistemoje „Java“, pirmiausia turite susipažinti su jos tipais. Leiskite supažindinti jus su jais kitame šio straipsnio skyriuje.

„Java“ „BlockingQueue“ konstruktorių tipai

„BlockingQueue“ sąsajoje „Java“ yra dviejų tipų konstruktoriai:



  • Neribota eilė: Šio tipo eilėje talpa bus nustatyta kaip Sveikasis skaičius.MAX_VALUE. Neribota eilė niekada nebus užblokuota, nes ji gali dinamiškai augti kiekvieną kartą, kai į ją įterpiamas elementas. Žemiau yra sintaksė, kad būtų sukurta neribota eilė:
BlockingQueue bq = new LinkedBlockingDeque ()
  • Apribota eilė: Tokios eilės atveju jums reikia perduoti eilės talpą jos sukūrimo metu, t. Y. Kaip statybininkas parametras. Priskyrus dydį, jo pakeisti negalima. Žemiau yra sintaksė, norint sukurti ribotą eilę:
„BlockingQueue bq“ = naujas „LinkedBlockingDeque“ (10)

Dabar, kai esate susipažinę su „BlockingQueue“ diegimo „Java“ būdais, leiskite man išvardyti keletą jos metodų.

„BlockingQueue“ sąsajos metodai

Metodas apibūdinimas
loginis pridėjimas (E e) Šis metodas padeda įterpti nurodytą elementą į šią eilę, jei eilėje yra vietos, kur ji busmesti anNeteisėta valstybės išimtis
loginės reikšmės yra (Object o) Šis metodas grąžinamas, jei eilėje yra nurodytas elementas
int drainTo (c rinkinys) Šis metodas pašalins visus galimus elementus iš eilės ir pridės juos prie nurodytos kolekcijos
int drainTo (c rinkinys, int maxElements) Šis metodas pašalins nurodytą skaičių galimų elementų iš eilės ir pridės juos į nurodytą
Booloean pasiūlymas (E e) Šis metodas įtrauks nurodytą elementą į eilę, jei jis nėra pilnas, ir pateiks true, kitaip jis pateiks false
loginis pasiūlymas (E e, ilgasis skirtasis laikas, „TimeUnit“ vienetas) Šis metodas įtrauks nurodytą elementą į eilę. Jei eilė pilna, ji laukia iki nurodyto laukimo laiko, kol vieta bus laisva.
E apklausa (ilgas skirtasis laikas, „TimeUnit“ vienetas) Šis metodas padeda gauti ir pašalinti eilės galvą. Jei eilė tuščia, ji lauks iki nurodyto laukimo laiko, kol elementas taps prieinamas
niekinis įdėjimas (E e) Šis metodas įtrauks nurodytą elementą į eilę laukdamas, kol atsiras vietos n, jei eilė pilna
int likusios talpos () Šis metodas padeda grąžinti papildomų elementų, kuriuos ši eilė gali idealiai priimti, neblokuodama, skaičių
loginis šalinimas (o objektas) Šis metodas pašalins vieną nurodyto elemento egzempliorių iš eilės tik tuo atveju, jei jis yra
E imtis () Šis metodas padės gauti ir pašalinti eilės galvą laukiant, kol atsiras elementas, jei eilė tuščia.

„BlockingQueue“ diegimas

Čia aš įgyvendinsiu paprastą „BlockingQueue“ pavyzdį „Java“klasės „EduProducer“ generuos duomenis ir įterps juos į eilė , tuo pačiu metu kita klasė, „EduConsumer“ pašalins duomenis iš tos pačios eilės.

Tam sukursiu 3 klases, būtent:

  1. EduProduceris
  2. EduConsumer
  3. EdurekaMain

Dabar kurkime kiekvieną iš šių klasių po vieną.

EduProducer.java

paketas edureka importuoti java.util.concurrent.BlockingQueue viešosios klasės „EduProducer“ įgyvendina „Runnable“ {private final BlockingQueue queue @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). nutrūkti ()} } private void process () išmeta InterruptedException {// 10 intų įdėkite į eilę (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

vardų sritis c ++
paketo edureka importas java.util.concurrent.BlockingQueue viešoji klasė „EduConsumer“ įgyvendina „Runnable“ {private final BlockingQueue queue @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Nutrūkti ()}} privatus negaliojantis procesas (sveikojo skaičiaus paėmimas) išmeta Public „EduConsumer“ („BlockingQueue“ eilė) {this.queue = queue}}

EdurekaMain.java

paketas edureka importuoti java.util.concurrent.BlockingQueue importuoti java.util.concurrent.LinkedBlockingQueue viešosios klasės „EdurekaMain“ {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (que) .start () nauja gija (nauja „EduConsumer“ (eilė)). pradžia ()}}

Kai baigsite rašyti kodą, vykdykite programą, kad gautumėte žemiau pateiktą išvestį:

[Gamintojas] Pridėti: 0 [Vartotojas] Paimkite: 0 [Gamintojas] Likęs eilės pajėgumas: 9 [Gamintojas] Pridėti: 1 [Gamintojas] Likęs eilės pajėgumas: 9 [Gamintojas] Pridėti: 2 [Gamintojo] Likęs eilės pajėgumas: 8 [Gamintojas] ] Pridėti: 3 [Gamintojo] Likęs eilės pajėgumas: 7 [Vartotojas] Paimkite: 1 [Gamintojas] Pridėti: 4 [Gamintojo] Likęs eilės pajėgumas: 7 [Gamintojas] Pridėti: 5 [Gamintojo] Likęs eilės pajėgumas: 6 [Gamintojas] Pridėti : 6 [Gamintojas] Likęs eilės pajėgumas: 5 [Vartotojas] Paimamas: 2 [Gamintojas] Pridėti: 7 [Gamintojas] Likęs eilės pajėgumas: 5 [Gamintojas] Pridėti: 8 [Gamintojas] Likęs eilės pajėgumas: 4 [Gamintojas] Pridėti: 9 [Gamintojo] Likęs eilės pajėgumas: 3 [Vartotojas] Paimkite: 3 [Vartotojas] Paimkite: 4 [Vartotojas] Paimkite: 5 [Vartotojas] Paimkite: 6 [Vartotojas] Paimkite: 7 [Vartotojas] Paimkite: 8 [Vartotojas] Paimkite: 9

Taip pateksime į šio straipsnio apie „Java“ blokavimo eilę pabaigą. Jei norite sužinoti išsamiau „Java“, galite kreiptis į mūsų taip pat.

Dabar, kai supratote „Java“ blokavimo eilės pagrindus, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje. „Edureka“ „Java J2EE“ ir „SOA“ mokymo ir sertifikavimo kursai yra skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žaisti „Java“ programavimą ir išmokyti pagrindines ir pažangiausias „Java“ koncepcijas kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šios „BlockingQueue in Java“ komentarų skyriuje, ir mes kuo greičiau susisieksime su jumis.