Dans ce didacticiel, nous allons découvrir la classe ArrayBlockingQueue et ses méthodes à l'aide d'exemples.
La ArrayBlockingQueue
classe 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.ArrayBlockingQueue
package.
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 ArrayBlockingQueue
classe fournit l'implémentation de toutes les méthodes de l' BlockingQueue
interface.
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 retournefalse
si 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 retournenull
si 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 lejava.util.Iterator
package 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 retournenull
si 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 InterruptedException
si 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 InterrupedException
si elle est interrompue en attendant. Par conséquent, nous devons l'enfermer dans un try… catch
bloc.
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 ArrayBlockingQueue
utilise 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.