Java ArrayBlockingQueue

Dans ce didacticiel, nous allons découvrir la classe ArrayBlockingQueue et ses méthodes à l'aide d'exemples.

La ArrayBlockingQueueclasse du framework Java Collections fournit l'implémentation de la file d'attente de blocage à l'aide d'un tableau.

Il implémente l'interface Java BlockingQueue.

Création de ArrayBlockingQueue

Afin de créer une file d'attente de blocage de tableau, nous devons importer le java.util.concurrent.ArrayBlockingQueuepackage.

Une fois le package importé, voici comment créer une file d'attente de blocage de tableau en Java:

 ArrayBlockingQueue animal = new ArrayBlockingQueue(int capacity); 

Ici,

  • Type - le type de la file d'attente de blocage du tableau
  • capacité - la taille de la file d'attente de blocage de la baie

Par exemple,

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

Remarque: il est obligatoire de fournir la taille du tableau.

Méthodes de ArrayBlockingQueue

La ArrayBlockingQueueclasse fournit l'implémentation de toutes les méthodes de l' BlockingQueueinterface.

Ces méthodes sont utilisées pour insérer, accéder et supprimer des éléments des files d'attente de blocage de tableaux.

De plus, nous allons en apprendre davantage sur deux méthodes put()et take()qui appuient l'opération de blocage dans la file d' attente de blocage du tableau.

Ces deux méthodes distinguent la file d'attente de blocage de baie des autres files d'attente classiques.

Insérer des éléments

  • add()- Insère l'élément spécifié dans la file d'attente de blocage du tableau. Il lève une exception si la file d'attente est pleine.
  • offer()- Insère l'élément spécifié dans la file d'attente de blocage du tableau. Il retourne falsesi la file d'attente est pleine.

Par exemple,

 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); ) ) 

Production

 ArrayBlockingQueue: (Chien, Chat, Cheval) 

Éléments d'accès

  • peek()- Renvoie un élément à l'avant de la file d'attente de blocage du tableau. Il retourne nullsi la file d'attente est vide.
  • iterator()- Renvoie un objet itérateur pour accéder séquentiellement aux éléments de la file d'attente de blocage du tableau. Il lève une exception si la file d'attente est vide. Nous devons importer le java.util.Iteratorpackage pour l'utiliser.

Par exemple,

 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(", "); ) ) ) 

Production

 ArrayBlockingQueue: (Dog, Cat, Horse) Élément consulté: Dog ArrayBlockingQueue Elements: Dog, Cat, Horse, 

Supprimer des éléments

  • remove()- Renvoie et supprime un élément spécifié de la file d'attente de blocage du tableau. Il lève une exception si la file d'attente est vide.
  • poll()- Renvoie et supprime un élément spécifié de la file d'attente de blocage du tableau. Il retourne nullsi la file d'attente est vide.
  • clear() - Supprime tous les éléments de la file d'attente de blocage du tableau.

Par exemple,

 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); ) ) 

Production

 ArrayBlockingQueue: (Chien, Chat, Cheval) Éléments supprimés: Utilisation de remove (): Chien Utilisation de poll (): Chat Mise à jour ArrayBlockingQueue: () 

méthode put () et take ()

Dans les processus multithreading, nous pouvons utiliser put()et take()bloquer le fonctionnement d'un thread pour le synchroniser avec un autre thread. Ces méthodes attendront jusqu'à ce qu'elles puissent être exécutées avec succès.

méthode put ()

Pour ajouter un élément à la fin d'une file d'attente de blocage de tableau, nous pouvons utiliser la put()méthode.

Si la file d'attente de blocage de tableau est pleine, elle attend qu'il y ait de l'espace dans la file d'attente de blocage de tableau pour ajouter un élément.

Par exemple,

 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); ) ) ) 

Production

 ArrayBlockingQueue: (Chien, Chat) 

Ici, la put()méthode peut lancer un InterruptedExceptionsi elle est interrompue en attendant. Par conséquent, nous devons l'enfermer dans un bloc try… catch.

take (), méthode

Pour retourner et supprimer un élément de l'avant de la file d'attente de blocage du tableau, nous pouvons utiliser la take()méthode.

Si la file d'attente de blocage de tableau est vide, elle attend jusqu'à ce qu'il y ait des éléments dans la file d'attente de blocage de tableau à supprimer.

Par exemple,

 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); ) ) ) 

Production

 ArrayBlockingQueue: (Chien, Chat) Élément supprimé: Chien 

Ici, la take()méthode lancera un InterrupedExceptionsi elle est interrompue en attendant. Par conséquent, nous devons l'enfermer dans un try… catchbloc.

Autres méthodes

Méthodes Descriptions
contains(element) Recherche dans la file d'attente de blocage du tableau l'élément spécifié.Si l'élément est trouvé, il retourne true, sinon il retourne false.
size() Renvoie la longueur de la file d'attente de blocage du tableau.
toArray() Convertit la file d'attente de blocage de tableau en tableau et la renvoie.
toString() Convertit la file d'attente de blocage du tableau en chaîne

Pourquoi utiliser ArrayBlockingQueue?

Le ArrayBlockingQueueutilise des baies comme stockage interne.

Il est considéré comme une collection thread-safe . Par conséquent, il est généralement utilisé dans les applications multi-threading.

Supposons qu'un thread insère des éléments dans la file d'attente et un autre thread supprime des éléments de la file d'attente.

Désormais, si le premier thread est plus lent que le deuxième thread, la file d'attente de blocage de tableau peut obliger le second thread à attendre que le premier thread termine ses opérations.

Articles intéressants...