Java ArrayBlockingQueue

In questo tutorial, impareremo a conoscere la classe ArrayBlockingQueue e i suoi metodi con l'aiuto di esempi.

La ArrayBlockingQueueclasse del framework Java Collections fornisce l'implementazione della coda di blocco utilizzando un array.

Implementa l'interfaccia Java BlockingQueue.

Creazione di ArrayBlockingQueue

Per creare una coda di blocco degli array, dobbiamo importare il java.util.concurrent.ArrayBlockingQueuepacchetto.

Una volta importato il pacchetto, ecco come possiamo creare una coda di blocco degli array in Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Qui,

  • Tipo: il tipo di coda che blocca l'array
  • capacità: la dimensione della coda di blocco dell'array

Per esempio,

 // Creating String type ArrayBlockingQueue with size 5 ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Creating Integer type ArrayBlockingQueue with size 5 ArrayBlockingQueue age = new ArrayBlockingQueue(5); 

Nota: è obbligatorio fornire la dimensione dell'array.

Metodi di ArrayBlockingQueue

La ArrayBlockingQueueclasse fornisce l'implementazione di tutti i metodi BlockingQueuenell'interfaccia.

Questi metodi vengono utilizzati per inserire, accedere ed eliminare elementi dalle code di blocco degli array.

Inoltre, impareremo due metodi put()e take()che supportano l'operazione di blocco nella coda di blocco dell'array.

Questi due metodi distinguono la coda di blocco dell'array da altre code tipiche.

Inserisci elementi

  • add()- Inserisce l'elemento specificato nella coda di blocco dell'array. Genera un'eccezione se la coda è piena.
  • offer()- Inserisce l'elemento specificato nella coda di blocco dell'array. Ritorna falsese la coda è piena.

Per esempio,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Using add() animals.add("Dog"); animals.add("Cat"); // Using offer() animals.offer("Horse"); System.out.println("ArrayBlockingQueue: " + animals); ) ) 

Produzione

 ArrayBlockingQueue: (Cane, Gatto, Cavallo) 

Elementi di accesso

  • peek()- Restituisce un elemento dalla parte anteriore della coda di blocco dell'array. Ritorna nullse la coda è vuota.
  • iterator()- Restituisce un oggetto iteratore per accedere in modo sequenziale agli elementi dalla coda di blocco dell'array. Genera un'eccezione se la coda è vuota. Dobbiamo importare il java.util.Iteratorpacchetto per usarlo.

Per esempio,

 import java.util.concurrent.ArrayBlockingQueue; import java.util.Iterator; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); // Add elements animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using peek() String element = animals.peek(); System.out.println("Accessed Element: " + element); // Using iterator() Iterator iterate = animals.iterator(); System.out.print("ArrayBlockingQueue Elements: "); while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Produzione

 ArrayBlockingQueue: (Dog, Cat, Horse) Elemento a cui si accede: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse, 

Rimuovi elementi

  • remove()- Restituisce e rimuove un elemento specificato dalla coda di blocco dell'array. Genera un'eccezione se la coda è vuota.
  • poll()- Restituisce e rimuove un elemento specificato dalla coda di blocco dell'array. Ritorna nullse la coda è vuota.
  • clear() - Rimuove tutti gli elementi dalla coda di blocco dell'array.

Per esempio,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayBlockingQueue: " + animals); // Using remove() String element1 = animals.remove(); System.out.println("Removed Element:"); System.out.println("Using remove(): " + element1); // Using poll() String element2 = animals.poll(); System.out.println("Using poll(): " + element2); // Using clear() animals.clear(); System.out.println("Updated ArrayBlockingQueue: " + animals); ) ) 

Produzione

 ArrayBlockingQueue: (Dog, Cat, Horse) Elementi rimossi: Using remove (): Dog Using poll (): Cat Aggiornato ArrayBlockingQueue: () 

metodo put () e take ()

Nei processi multithread, possiamo usare put()e take()per bloccare il funzionamento di un thread per sincronizzarlo con un altro thread. Questi metodi aspetteranno fino a quando non potranno essere eseguiti con successo.

metodo put ()

Per aggiungere un elemento alla fine di una coda di blocco di array, possiamo utilizzare il put()metodo.

Se la coda di blocco dell'array è piena, attende finché non c'è spazio nella coda di blocco dell'array per aggiungere un elemento.

Per esempio,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( // Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Produzione

 ArrayBlockingQueue: (Cane, Gatto) 

In questo caso, il put()metodo può generare un messaggio InterruptedExceptionse viene interrotto durante l'attesa. Quindi, dobbiamo racchiuderlo all'interno di un blocco try… catch.

metodo take ()

Per restituire e rimuovere un elemento dalla parte anteriore della coda di blocco dell'array, possiamo utilizzare il take()metodo.

Se la coda di blocco dell'array è vuota, attende finché non sono presenti elementi nella coda di blocco dell'array da eliminare.

Per esempio,

 import java.util.concurrent.ArrayBlockingQueue; class Main ( public static void main(String() args) ( ArrayBlockingQueue animals = new ArrayBlockingQueue(5); try ( //Add elements to animals animals.put("Dog"); animals.put("Cat"); System.out.println("ArrayBlockingQueue: " + animals); // Remove an element String element = animals.take(); System.out.println("Removed Element: " + element); ) catch(Exception e) ( System.out.println(e); ) ) ) 

Produzione

 ArrayBlockingQueue: (Dog, Cat) Elemento rimosso: Dog 

Qui, il take()metodo lancerà un InterrupedExceptionse viene interrotto durante l'attesa. Quindi, dobbiamo racchiuderlo all'interno di un try… catchblocco.

Altri metodi

Metodi Descrizioni
contains(element) Cerca l'elemento specificato nella coda di blocco dell'array. Se l'elemento viene trovato, ritorna true, altrimenti ritorna false.
size() Restituisce la lunghezza della coda di blocco dell'array.
toArray() Converte la coda di blocco dell'array in un array e lo restituisce.
toString() Converte la coda di blocco dell'array in una stringa

Perché utilizzare ArrayBlockingQueue?

Gli ArrayBlockingQueueusi array come memoria interna.

È considerata una raccolta thread-safe . Quindi, è generalmente utilizzato nelle applicazioni multi-threading.

Supponiamo che un thread inserisca elementi nella coda e un altro thread rimuova elementi dalla coda.

Ora, se il primo thread è più lento del secondo thread, la coda di blocco dell'array può fare in modo che il secondo thread attenda fino a quando il primo thread non completa le sue operazioni.

Articoli interessanti...