Cos'è BlockingQueue in Java e come implementarlo?



Questo articolo su BlockingQueue in Java ti aiuterà a conoscere l'interfaccia di BlockingQueue. Ti fornirà anche informazioni sui suoi metodi e sull'implementazione pratica

è estremamente popolare tra i programmatori grazie alla sua gamma completa di funzionalità integrate. La maggior parte delle volte avrai una soluzione dedicata al tuo problema anche prima che appaia. Una parte così estremamente utile e importante di è l'interfaccia BlockingQueue in Java. Attraverso questo articolo, farò luce su BlockingQueue in Java e sui metodi per implementarlo.

Di seguito sono riportati gli argomenti trattati in questo articolo:





Interfaccia BlockingQueue in Java

BlockingQueue in Java è un'interfaccia che è stata aggiunta in Java 1.5 insieme ad alcune altre classi di utilità simultanee come ConcurrentHashMap, CopyOnWriteArrrayList, ecc. L'interfaccia BlockingQueue appartiene al java.util.concurrent pacchetto .Questa interfaccia migliora il controllo del flusso attivando il blocco, nel caso in cui un thread stia tentando di rimuovere dalla coda una coda vuota o accodare una coda piena. In entrambi i casi, questa interfaccia è utile.In termini più semplici, supponiamo a sta cercando di aggiungere elementi a una coda già piena. A questo punto nel programma, verrà richiamato BlockingQueue che bloccherà quel particolare thread fino a quando un altro thread non rilascerà la coda per fare spazio. Questo può essere il risultato dell'annullamento dell'accodamento di uno o più elementi di eliminazione dell'intera coda. Allo stesso modo, BlockingQueue verrà richiamato per bloccare un thread che tenta di rimuovere dalla coda una coda già vuota fino a quando un altro thread non inserisce o aggiunge un elemento nel vuoto coda .

Mentre si lavora con l'interfaccia BlockingQueue in Java, è necessario ricordare che non accetta un valore nullo. Nel caso in cui provi a farlo, verrà immediatamente lanciata una NullPointerException. La figura seguente rappresenta il funzionamento dell'interfaccia BlockingQueue in Java.



BlockingQueue - BlockingQueue in Java - EdurekaQuesto interfaccia viene utilizzato principalmente tra produttori-consumatori in quanto è thread-safe.Quello che voglio dire è che l'interfaccia BlockingQueue può essere utilizzata per creare una coda che può essere condivisa sia dal produttore che dal consumatore

Per lavorare con BlockingQueue in Java, devi prima familiarizzare con i suoi tipi. Lascia che te li presenti nella prossima sezione di questo articolo.

serie di fibonacci di ricorsione in java

Tipi di costruttori per BlockingQueue in Java

Esistono due tipi di costruttori per l'interfaccia BlockingQueue in Java:



  • Coda illimitata: Per questo tipo di coda, la capacità sarà impostata su Integer.MAX_VALUE. Una coda illimitata non verrà mai bloccata poiché può crescere dinamicamente ogni volta che un elemento viene inserito in essa. Di seguito è riportata la sintassi per creare una coda illimitata:
BlockingQueue bq = new LinkedBlockingDeque ()
  • Coda limitata: Per questo tipo di coda, è necessario superare la capacità della coda al momento della sua creazione, ovvero come file costruttore parametro. Una volta assegnata la dimensione, non è possibile modificarla. Di seguito è riportata la sintassi per creare una coda delimitata:
BlockingQueue bq = new LinkedBlockingDeque (10)

Ora che hai familiarità con i modi per implementare BlockingQueue in Java, lasciami elencare alcuni dei suoi metodi.

Metodi nell'interfaccia BlockingQueue

Metodo Descrizione
booleano add (E e) Questo metodo aiuta a inserire l'elemento specificato in questa coda se c'è spazio nella coda, altrimenti lo faràlancia unIllegalStateException
booleano contiene (Oggetto o) Questo metodo restituisce true se la coda contiene l'elemento specificato
int drainTo (Collezione c) Questo metodo rimuoverà tutti gli elementi disponibili dalla coda e li aggiungerà alla raccolta specificata
int drainTo (Collezione c, int maxElements) Questo metodo rimuoverà un dato numero di elementi disponibili dalla coda e li aggiungerà nel file
offerta booloeana (E e) Questo metodo inserirà l'elemento specificato nella coda se non è pieno e restituirà true, altrimenti restituirà false
offerta booleana (E e, timeout lungo, unità TimeUnit) Questo metodo inserirà l'elemento specificato nella coda. Se la coda è piena, attenderà fino al tempo di attesa specificato affinché lo spazio diventi disponibile.
E poll (timeout lungo, unità TimeUnit) Questo metodo aiuta a recuperare e rimuovere la testa della coda. Nel caso in cui la coda sia vuota, attenderà fino al tempo di attesa specificato prima che un elemento diventi disponibile
void put (E e) Questo metodo inserirà l'elemento specificato nella coda aspettando che lo spazio diventi disponibile nel caso in cui la coda sia piena
int rimanenteCapacità () Questo metodo aiuta a restituire il numero di elementi aggiuntivi che questa coda può idealmente accettare senza essere bloccata
booleano remove (Object o) Questo metodo rimuoverà una singola istanza dell'elemento specificato dalla coda solo se è presente
E prendi () Questo metodo aiuterà a recuperare e rimuovere l'inizio della coda aspettando che un elemento diventi disponibile, nel caso in cui la coda sia vuota.

Implementazioni di BlockingQueue

Qui implementerò un semplice esempio di BlockingQueue in Java doveclass EduProducer genererà i dati e li inserirà in un file coda , contemporaneamente, un'altra classe, EduConsumer rimuoverà i dati dalla stessa coda.

ciclo di vita dell'attività di Android

Per questo creerò 3 classi e cioè:

  1. EduProducer
  2. EduConsumer
  3. EdurekaMain

Creiamo ora ciascuna di queste classi una per una.

EduProducer.java

pacchetto edureka import java.util.concurrent.BlockingQueue public class EduProducer implementa Runnable {private final BlockingQueue queue @Override public void run () {try {process ()} catch (InterructedException e) {Thread.currentThread (). interrupt ()} } private void process () genera InterructedException {// Mette 10 int in coda per (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

pacchetto 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 (InterrruptException e) {Thread.currentThread (). Interrupt ()}} private void process (Integer take) throws InterructedException {System.out.println ('[Consumer] Remove:' + take) Thread.sleep (500)} public EduConsumer (BlockingQueue queue) {this.queue = queue}}

EdurekaMain.java

pacchetto 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 (queue)) .start () new Thread (new EduConsumer (queue)). start ()}}

Una volta che hai finito di scrivere il codice, esegui il programma per ottenere l'output seguente:

programma round robin in c
[Produttore] Aggiungi: 0 [Consumatore] Accetta: 0 [Produttore] Capacità rimanente coda: 9 [Produttore] Aggiungi: 1 [Produttore] Capacità rimanente coda: 9 [Produttore] Aggiungi: 2 [Produttore] Capacità rimanente coda: 8 [Produttore ] Aggiungi: 3 [Produttore] Capacità rimanente coda: 7 [Consumatore] Prendi: 1 [Produttore] Aggiungi: 4 [Produttore] Capacità rimanente coda: 7 [Produttore] Aggiungi: 5 [Produttore] Capacità rimanente coda: 6 [Produttore] Aggiungi : 6 [Produttore] Capacità rimanente coda: 5 [Consumatore] Prendi: 2 [Produttore] Aggiungi: 7 [Produttore] Capacità rimanente coda: 5 [Produttore] Aggiungi: 8 [Produttore] Capacità rimanente coda: 4 [Produttore] Aggiungi: 9 [Produttore] Capacità rimanente della coda: 3 [Consumatore] Presa: 3 [Consumatore] Presa: 4 [Consumatore] Presa: 5 [Consumatore] Presa: 6 [Consumatore] Presa: 7 [Consumatore] Presa: 8 [Consumatore] Presa: 9

Questo ci porta alla fine di questo articolo su BlockingQueue in Java. Se desideri imparare Java in modo più dettagliato, puoi fare riferimento al nostro anche.

Ora che hai compreso le basi di BlockingQueue in Java, controlla il file da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione e certificazione Java J2EE e SOA di Edureka è progettato per studenti e professionisti che desiderano diventare sviluppatori Java. Il corso è progettato per darti un vantaggio nella programmazione Java e formarti per concetti Java sia di base che avanzati insieme a vari framework Java come Hibernate e Spring.

Hai domande per noi? Per favore, menzionalo nella sezione commenti di questa 'BlockingQueue in Java' e ti risponderemo il prima possibile.