Come implementare l'interfaccia BlockingQueue in Java



Questo articolo ti fornirà una conoscenza dettagliata e completa di come implementare un'interfaccia BlockingQueue in Java.

Una coda è un aspetto importante di qualsiasi linguaggio di programmazione. Soprattutto se ne parliamo . In questo articolo, discuteremo dell'interfaccia BlockingQueue in Java nel seguente ordine:

Cos'è un'interfaccia BlockingQueue in Java?

Un'interfaccia BlockingQueue in Java è una coda che si blocca quando si tenta di rimuoverla dalla coda e la coda è vuota o se si tenta di accodare elementi ad essa e la coda è già piena. Un thread che tenta di rimuovere la coda da una coda vuota viene bloccato finché un altro thread non inserisce un elemento nella coda. Un thread che tenta di accodare un elemento in una coda piena viene bloccato fino a quando un altro thread non fa spazio nella coda, rimuovendo uno o più elementi dalla coda o cancellando completamente la coda.





coda di priorità in c ++

L'interfaccia BlockingQueue in Java non accettanullovalori e lanciaNullPointerExceptionse provi a memorizzare il valore nullo nella coda.Le implementazioni di Java BlockingQueue sono thread-safe . Tutti i metodi di accodamento sono di natura atomica e utilizzano blocchi interni o altre forme di controllo della concorrenza.



Diagramma delle classi della coda Java

L'interfaccia Java Queue estende l'interfaccia Collection. L'interfaccia Collection estende l'interfaccia Iterable. Alcune delle classi di implementazione Queue utilizzate di frequente sono LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,ecc. AbstractQueue fornisce un'implementazione scheletrica dell'interfaccia Queue per ridurre lo sforzo nell'implementazione di Queue.

BlockingQueue Types

Le BlockingQueue sono di due tipi:



  • Coda illimitata: La capacità della coda di blocco sarà impostata su Integer.MAX_VALUE. In caso di coda di blocco illimitata, la coda non si bloccherà mai perché potrebbe raggiungere dimensioni molto grandi. quando aggiungi elementi, le dimensioni aumentano.

Sintassi:
BlockingQueue coda di blocco = nuovo LinkedBlockingDeque ()

  • Coda limitata: Il secondo tipo di coda è la coda delimitata. In caso di coda limitata è possibile creare una coda bypassando la capacità della coda nel costruttore di code:
    Sintassi:
    // Crea una coda di blocco con capacità 5

BlockingQueue coda di blocco = nuovo LinkedBlockingDeque (5)

Metodi nell'interfaccia BlockingQueue

Cambia tipo Sintassi del metodo Usato per Descrizione
booleano add(E e) Inserimento

Inserisce l'elemento specificato in questa coda se è possibile farlo immediatamente senza violare le limitazioni di capacità, restituendo true in caso di esito positivo e generando un'eccezione IllegalStateException se non è attualmente disponibile spazio.

booleano contiene (Oggetto o) Esaminare

Restituisce vero se questa coda contiene l'elemento specificato.

int drainTo (Collezione c) Recupero o rimozione

Rimuove tutti gli elementi disponibili da questa coda e li aggiunge alla raccolta data.

int drainTo (Collezione c, int maxElements) Recupero o rimozione

Rimuove al massimo il numero dato di elementi disponibili da questa coda e li aggiunge alla raccolta data.

booleano offer(E e) Inserimento

Inserisce l'elemento specificato in questa coda se è possibile farlo immediatamente senza violare le limitazioni di capacità, restituendo true in caso di successo e false se non è attualmente disponibile spazio.

booleano offerta (E e, timeout lungo, unità TimeUnit) Inserimento

Inserisce l'elemento specificato in questa coda, attendendo fino al tempo di attesa specificato, se necessario, affinché lo spazio diventi disponibile.

E poll (timeout lungo, unità TimeUnit) Recupero o rimozione

Recupera e rimuove la testata di questa coda, aspettando fino al tempo di attesa specificato, se necessario, che un elemento diventi disponibile.

vuoto mettere (E e) Inserimento

Inserisce l'elemento specificato in questa coda, aspettando se necessario che lo spazio diventi disponibile.

int capacità rimanente () Esaminare

Restituisce il numero di elementi aggiuntivi che questa coda può idealmente (in assenza di vincoli di memoria o di risorse) accettare senza bloccare, o Integer.MAX_VALUE se non c'è limite intrinseco.

booleano rimuovere (Oggetto o) + Recupero o rimozione

Rimuove una singola istanza dell'elemento specificato da questa coda,se è presente.

E prendere() Recupero o rimozione

Recupera e rimuove la testa di questa coda, aspettando se necessario fino a quando un elemento non diventa disponibile.

Interfaccia BlockingQueue in Java Esempio: servizio

pacchetto com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue public class ProducerConsumerService {public static void main (String [] args) {// Creating BlockingQueue of size 10 BlockingQueue queue = new ArrayBlockingQueue = new ArrayBlockingQueue 10) produttore produttore = nuovo produttore (coda) consumatore consumatore = nuovo consumatore (coda) // produttore iniziale per produrre messaggi in coda nuovo thread (produttore) .start () // consumatore iniziale per consumare messaggi dalla coda nuovo thread (consumatore) .start () System.out.println ('Producer and Consumer è stato avviato')}}

si estende e implementa insieme in java

Con questo, arriviamo alla fine dell'articolo BlockingQueue Interface in Java. Spero che tutti i tuoi concetti ora siano chiari.

Controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. I corsi di formazione e certificazione Java J2EE e SOA di Edureka sono progettati 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? Si prega di menzionarlo nella sezione commenti di questo blog 'BlockingQueue Interface in Java' e ti risponderemo il prima possibile.