Què és BlockingQueue a Java i com implementar-lo?



Aquest article sobre BlockingQueue a Java us ajudarà a conèixer la interfície BlockingQueue. També us proporcionarà informació sobre els seus mètodes i la seva implementació pràctica

és extremadament popular entre els programadors a causa de la seva àmplia gamma de funcions integrades. La majoria de les vegades tindreu una solució específica per al vostre problema fins i tot abans que aparegui. Una part tan important i útil de és la interfície BlockingQueue de Java. Mitjançant aquest article, donaré llum sobre BlockingQueue a Java i els mètodes per implementar-lo.

A continuació es detallen els temes tractats en aquest article:





Interfície BlockingQueue a Java

BlockingQueue a Java és una interfície que es va afegir a Java 1.5 juntament amb algunes altres classes d'utilitat simultànies com ConcurrentHashMap, CopyOnWriteArrrayList, etc. La interfície BlockingQueue pertany a java.util.concurrent paquet .Aquesta interfície millora el control de flux activant el bloqueig, en cas que un fil intenti deixar de posar una cua buida o fer una cua completa. En qualsevol cas, aquesta interfície és útil.En termes més simples, suposem que a intenta afegir elements a una cua ja completa. En aquest punt del programa, s’invocarà BlockingQueue que bloquejarà aquest fil en particular fins que un altre fil alliberi la cua per fer espai. Això pot ser el resultat de la retirada d'un element o elements de la totalitat de la cua. De la mateixa manera, s’invocarà BlockingQueue per bloquejar un fil que intenti deixar la cua ja buida fins que insereixi algun altre fil o afegir un element al buit. cua .

Mentre treballeu amb la interfície BlockingQueue a Java, heu de recordar que no accepta un valor nul. En cas que proveu de fer-ho, llançarà instantàniament una excepció NullPointerException. La figura següent representa el funcionament de la interfície BlockingQueue a Java.



BlockingQueue - BlockingQueue a Java - EdurekaAixò interfície s’utilitza principalment entre productors-consumidors, ja que és apta per a fils.El que vull dir és que la interfície BlockingQueue es pot utilitzar per crear una cua que pugui compartir tant el productor com el consumidor

Per treballar amb BlockingQueue a Java, primer heu de familiaritzar-vos amb els seus tipus. Deixeu-me presentar-los a la següent secció d’aquest article.

Tipus de constructors per BlockingQueue a Java

Hi ha dos tipus de constructors per a la interfície BlockingQueue a Java:



  • Cua sense límits: Per a aquest tipus de cua, la capacitat s'establirà en Integer.MAX_VALUE. Una cua il·limitada no es bloquejarà mai, ja que pot créixer dinàmicament cada vegada que s’hi insereix un element. A continuació es mostra la sintaxi per crear una cua il·limitada:
BlockingQueue bq = new LinkedBlockingDeque ()
  • Cua delimitada: Per a aquest tipus de cua, heu de passar la capacitat de la cua en el moment de la seva creació, és a dir, com a constructor paràmetre. Un cop assignada la mida, no es pot canviar. A continuació es mostra la sintaxi per crear una cua delimitada:
BlockingQueue bq = new LinkedBlockingDeque (10)

Ara que ja esteu familiaritzat amb les maneres d'implementar BlockingQueue a Java, permeteu-me enumerar alguns dels seus mètodes.

Mètodes a la interfície BlockingQueue

Mètode Descripció
addició booleana (E e) Aquest mètode ajuda a inserir l'element especificat en aquesta cua si hi ha espai a la cuallançar unIllegalStateException
booleà conté (Objecte o) Aquest mètode torna cert si la cua conté l'element especificat
int drainTo (Col·lecció c) Aquest mètode eliminarà tots els elements disponibles de la cua i els afegirà a la col·lecció especificada
int drainTo (Col·lecció c, int maxElements) Aquest mètode eliminarà el nombre determinat d'elements disponibles de la cua i els afegirà a l'especificat
oferta booleana (E e) Aquest mètode inserirà l'element especificat a la cua si no està ple i retorna cert, en cas contrari retornarà fals
oferta booleana (E e, temps llarg, unitat TimeUnit) Aquest mètode inserirà l'element especificat a la cua. En cas que la cua estigui plena, s'esperarà fins al temps d'espera especificat perquè l'espai estigui disponible.
Enquesta E (temps llarg, unitat TimeUnit) Aquest mètode ajuda a recuperar i eliminar el cap de la cua. En cas que la cua estigui buida, esperarà fins al temps d'espera especificat perquè un element estigui disponible
buit posat (E e) Aquest mètode inserirà l'element especificat a la cua esperant que l'espai estigui disponible n si la cua està plena
int movingCapacity () Aquest mètode ajuda a retornar el nombre d’elements addicionals que aquesta cua idealment pot acceptar sense bloquejar-se
eliminar booleà (objecte o) Aquest mètode eliminarà una sola instància de l'element especificat de la cua només si està present
E take () Aquest mètode ajudarà a recuperar i eliminar el cap de la cua esperant que un element estigui disponible, en cas que la cua estigui buida.

Implementacions de BlockingQueue

Aquí implementaré un exemple senzill de BlockingQueue a Java onLa classe EduProducer generarà les dades i les inserirà en un fitxer cua , simultàniament, una altra classe, EduConsumer eliminarà les dades de la mateixa cua.

Per a això crearé 3 classes:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Ara creem cadascuna d’aquestes classes una per una.

EduProducer.java

paquet edureka import java.util.concurrent.BlockingQueue public class EduProducer implementa Runnable {private final BlockingQueue queue @Override public void run () {try {process ()} catch (InterruptedException e) {Thread.currentThread (). interrupt ()} } private void process () llença InterruptedException {// Introduïu 10 polzades a la cua de (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

cogombre java selenium webdriver exemple
paquet edureka import java.util.concurrent.BlockingQueue public class EduConsumer implementa Runnable {private final BlockingQueue queue @Override public void run () {try {while (true) {Integer take = queue.take () process (take)}} catch (InterruptedException e) {Thread.currentThread (). Interrupt ()}} procés de buit privat (Integer take) llança InterruptedException {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (cua BlockingQueue) {this.queue = queue}}

EdurekaMain.java

paquet 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) new Thread (new EduProducer (cua)) .start () nou fil (nou EduConsumer (cua)). start ()}}

Un cop hàgiu acabat d'escriure el codi, executeu el programa per obtenir la sortida següent:

[Productor] Afegeix: 0 [Consumidor] Prèn: 0 [Productor] Capacitat restant de cua: 9 [Productor] Afegeix: 1 [Productor] Capacitat restant de cua: 9 [Productor] Afegeix: 2 [Productor] Capacitat restant de cua: 8 [Productor ] Afegeix: 3 [Producer] Capacitat restant de la cua: 7 [Consumidor] Prèn: 1 [Productor] Afegeix: 4 [Productor] Capacitat restant de la cua: 7 [Productor] Afegeix: 5 [Productor] Capacitat restant de la cua: 6 [Productor] Afegeix : 6 [Productor] Capacitat restant de la cua: 5 [Consumidor] Prendre: 2 [Productor] Afegeix: 7 [Productor] Capacitat restant de la cua: 5 [Productor] Afegeix: 8 [Productor] Capacitat restant de la cua: 4 [Productor] Afegeix: 9 [Productor] Capacitat restant de la cua: 3 [Consumidor] Prendre: 3 [Consumidor] Prendre: 4 [Consumidor] Prendre: 5 [Consumidor] Prendre: 6 [Consumidor] Prendre: 7 [Consumidor] Prendre: 8 [Consumidor] Prendre: 9

Això ens porta al final d’aquest article sobre BlockingQueue a Java. Si voleu aprendre Java amb més detall, podeu consultar el nostre document també.

Ara que ja heu entès els conceptes bàsics de BlockingQueue a Java, consulteu el fitxer per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació i certificació de Java J2EE i SOA d’Edureka està dissenyat per a estudiants i professionals que vulguin ser desenvolupador de Java. El curs està dissenyat per donar-vos un avantatge en la programació de Java i formar-vos tant per a conceptes Java bàsics com avançats, juntament amb diversos marcs Java com Hibernate i Spring.

Tens alguna pregunta? Si us plau, mencioneu-ho a la secció de comentaris d'aquesta 'BlockingQueue a Java' i us respondrem el més aviat possible.