Mitä Java on BlockingQueue ja miten se otetaan käyttöön?



Tämä Java-sivuston BlockingQueue-artikkeli auttaa sinua oppimaan BlockingQueue-käyttöliittymästä. Se antaa sinulle myös oivalluksia sen menetelmistä ja käytännön toteutuksesta

on erittäin suosittu ohjelmoijien keskuudessa kattavan valikoiman sisäänrakennettuja ominaisuuksia. Useimmiten sinulla on oma ratkaisu ongelmaan jo ennen kuin se ilmestyy. Tällainen erittäin hyödyllinen ja tärkeä osa on Java-käyttöliittymä BlockingQueue. Tämän artikkelin välityksellä aion valaista jonkin verran Javan BlockingQueue-ohjelmaa ja sen toteuttamistapoja.

Tässä ovat tämän artikkelin aiheet:





BlockingQueue Interface Java-käyttöjärjestelmässä

BlockingQueue Java-sovelluksessa on käyttöliittymä, joka lisättiin Java 1.5: ssä yhdessä muutaman muun samanaikaisen Utility-luokan kanssa, kuten ConcurrentHashMap, CopyOnWriteArrrayList jne. BlockingQueue-käyttöliittymä kuuluu java.util.concurrent paketti .Tämä käyttöliittymä parantaa virtauksen hallintaa aktivoimalla eston, jos ketju yrittää purkaa tyhjää jonoa tai koko jonoa. Kummassakin tapauksessa tämä käyttöliittymä on kätevä.Oletetaan yksinkertaisemmin sanottuna a yrittää lisätä elementtejä jo täyteen jonoon. Tässä ohjelmassa käynnistetään BlockingQueue, joka estää kyseisen ketjun, kunnes toinen säie vapauttaa jonon vapauttamaan tilaa. Tämä voi johtua joko jonon vapauttavan elementin purkamisesta. Vastaavasti BlockingQueue kutsutaan estämään ketju, joka yrittää purkaa jo tyhjän jonon, kunnes joku muu ketju lisää tai lisää elementin tyhjään jonottaa .

Kun työskentelet Javan BlockingQueue-käyttöliittymän kanssa, sinun on muistettava, että se ei hyväksy nolla-arvoa. Jos yrität tehdä niin, se heittää heti NullPointerExceptionin. Alla oleva kuva kuvaa Java-käyttöliittymän toimintaa.



BlockingQueue - BlockingQueue Java - EdurekaTämä käyttöliittymä käytetään pääasiassa tuottaja-kuluttajat, koska se on säiettä turvallinen.Tarkoitan, että BlockingQueue-käyttöliittymällä voidaan luoda jono, joka voidaan jakaa sekä tuottajalle että kuluttajalle

Jotta voisit työskennellä Java BlockingQueuen kanssa, sinun on ensin perehdyttävä sen tyyppeihin. Haluan esitellä sinulle heille tämän artikkelin seuraavassa osassa.

def __init__

Rakentajien tyypit Javan BlockingQueue-sovellukseen

BlockingQueue-käyttöliittymälle Java-järjestelmässä on kahden tyyppisiä rakentajia:



  • Rajoittamaton jono: Tämän tyyppiselle jonolle kapasiteetti asetetaan Kokonaisluku.MAX_VALUE. Rajoittamatonta jonoa ei koskaan estetä, koska se voi kasvaa dynaamisesti, aina kun elementti lisätään siihen. Alla on syntaksin luominen rajoittamaton jono:
BlockingQueue bq = uusi LinkedBlockingDeque ()
  • Rajoitettu jono: Tällaista jonoa varten sinun on siirrettävä jonon kapasiteetti sen luomishetkellä, ts. rakentaja parametri. Kun koko on määritetty, sitä ei voi muuttaa. Alla on syntaksi rajatun jonon luomiseksi:
BlockingQueue bq = uusi LinkedBlockingDeque (10)

Nyt kun olet perehtynyt tapoihin toteuttaa BlockingQueue Java, haluan luetella muutamia sen menetelmistä.

Menetelmät BlockingQueue-käyttöliittymässä

Menetelmä Kuvaus
looginen lisäys (E e) Tämä menetelmä auttaa lisäämään määritetyn elementin tähän jonoon, jos jonossa on muuta tilaaheittääIllegalStateException
totuusarvo sisältää (Object o) Tämä menetelmä palauttaa arvon tosi, jos jono sisältää määritetyn elementin
int drainTo (Kokoelma c) Tämä menetelmä poistaa kaikki käytettävissä olevat elementit jonosta ja lisää ne määritettyyn kokoelmaan
int drainTo (Kokoelma c, int maxElements) Tämä menetelmä poistaa tietyn määrän käytettävissä olevia elementtejä jonosta ja lisää ne määritettyyn
Booloean-tarjous (E e) Tämä menetelmä lisää määritetyn elementin jonoon, jos se ei ole täynnä ja palauttaa true, muuten se palauttaa false
looginen tarjous (E e, pitkä aikakatkaisu, TimeUnit-yksikkö) Tämä menetelmä lisää määritetyn elementin jonoon. Jos jono on täynnä, se odottaa määritettyä odotusaikaa, kunnes tila on käytettävissä.
E-kysely (pitkä aikakatkaisu, TimeUnit-yksikkö) Tämä menetelmä auttaa jonon pään hakemisessa ja poistamisessa. Jos jono on tyhjä, se odottaa määritettyä odotusaikaa, kunnes elementti on käytettävissä
mitätön put (E e) Tämä menetelmä lisää määritetyn elementin jonoon odottamalla, että tilaa on vapaana n, jos jono on täynnä
sis. jäljellä oleva kapasiteetti () Tämä menetelmä auttaa palauttamaan määrän muita elementtejä, jotka tämä jono voi ihanteellisesti hyväksyä estämättä
looginen poisto (Object o) Tämä menetelmä poistaa yhden määritetyn elementin esiintymän jonosta vain, jos se on läsnä
E ottaa () Tämä menetelmä auttaa jonon pään hakemisessa ja poistamisessa odottamalla, että elementti tulee saataville, jos jono on tyhjä.

BlockingQueue-toteutukset

Toteutan tässä yksinkertaisen esimerkin BlockingQueueesta Javaissa missäluokan EduProducer luo tiedot ja lisää ne a jonottaa , samanaikaisesti toinen luokka, EduConsumer poistaa tiedot samasta jonosta.

ero hash-taulukon ja hash-kartan välillä

Tätä varten luon 3 luokkaa, nimittäin:

  1. EduTuottaja
  2. EduKuluttaja
  3. EdurekaMain

Luodaan nyt kukin näistä luokista yksi kerrallaan.

EduProducer.java

paketti edureka import java.util.concurrent.BlockingQueue julkinen luokka EduProducer toteuttaa Runnable {private final BlockingQueue queue @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). keskeytä ()} } private void process () heittää InterruptedException {// Laita 10 tuumaa jonoon (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

paketti edureka import java.util.concurrent.BlockingQueue julkinen luokka EduConsumer toteuttaa Runnable {private final BlockingQueue jonon @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Keskeytä ()}} private void -prosessi (kokonaislukema) heittää InterruptedException {System.out.println ('[[Kuluttaja] Poista:' + ota) Thread.sleep (500)} public EduConsumer (BlockingQueue jono) {this.queue = jono}}

EdurekaMain.java

paketti edureka tuo java.util.concurrent.BlockingQueue tuo java.util.concurrent.LinkedBlockingQueue julkinen luokka EdurekaMain {public static void main (String [] args) {BlockingQueue queue = new LinkedBlockingQueue (10) new Thread (new EduProducer (que) .start () new Thread (uusi EduConsumer (jono)). start ()}}

Kun olet kirjoittanut koodin, suorita ohjelma saadaksesi alla olevan tuloksen:

mikä on avaimen virhe pythonissa
[Tuottaja] Lisää: 0 [Kuluttaja] Ota: 0 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 9 [Tuottaja] Lisää: 1 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 9 [Tuottaja] Lisää: 2 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 8 [Tuottaja ] Lisää: 3 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 7 [Kuluttaja] Ota: 1 [Tuottaja] Lisää: 4 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 7 [Tuottaja] Lisää: 5 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 6 [Tuottaja] Lisää : 6 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 5 [Kuluttaja] Ota: 2 [Tuottaja] Lisää: 7 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 5 [Tuottaja] Lisää: 8 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 4 [Tuottaja] Lisää: 9 [Tuottaja] Jonon jäljellä oleva kapasiteetti: 3 [Kuluttaja] Ota: 3 [Kuluttaja] Ota: 4 [Kuluttaja] Ota: 5 [Kuluttaja] Ota: 6 [Kuluttaja] Ota: 7 [Kuluttaja] Ota: 8 [Kuluttaja] Ota: 9

Tämä vie meidät tämän Java-BlockingQueue-artikkelin loppuun. Jos haluat oppia Java-tarkempia tietoja, voit tutustua sivustoomme yhtä hyvin.

Nyt kun olet ymmärtänyt Java-ohjelman BlockingQueuen perusteet, tutustu Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssi on suunniteltu opiskelijoille ja ammattilaisille, jotka haluavat olla Java-kehittäjiä. Kurssi on suunniteltu antamaan sinulle etumatka Java-ohjelmointiin ja kouluttamaan sinua sekä ydin- että edistyneille Java-konsepteille sekä erilaisille Java-kehyksille, kuten Hibernate & Spring.

Onko sinulla kysymys meille? Mainitse se tämän 'BlockingQueue in Java' -kommenttiosassa, niin otamme sinuun yhteyttä mahdollisimman pian.