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
- Vrste konstruktorjev za BlockingQueue v Javi
- Metode v vmesniku BlockingQueue
- Izvedbe BlockingQueue
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.
To 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:
- EduProducer
- EduConsumer
- 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.