Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java ArrayBlockingQueue : Guide Avancé sur les Files de Blocage et Opérations Thread-Safe

Java ArrayBlockingQueue

Explorez la classe Java ArrayBlockingQueue – apprenez à créer, manipuler et utiliser de manière thread-safe cette file de blocage à taille fixe avec des exemples clairs.

La classe ArrayBlockingQueue du framework Java Collections fournit une file thread-safe, bornée, appuyée par un tableau. Elle implémente l'interface BlockingQueue, permettant aux producteurs et consommateurs de se coordonner via des opérations de blocage.


Création d'un ArrayBlockingQueue

Importez java.util.concurrent.ArrayBlockingQueue et instanciez avec une capacité fixe :

ArrayBlockingQueue<Type> queue = new ArrayBlockingQueue<>(capacity);

Où Type est le type d'élément et capacity est la taille maximale.

Note : La capacité est obligatoire ; elle détermine la taille bornée de la file.


Méthodes Principales d'ArrayBlockingQueue

La classe implémente toutes les méthodes de BlockingQueue pour l'insertion, l'accès et la suppression d'éléments. Voici les opérations les plus fréquemment utilisées.

Insérer des Éléments

ArrayBlockingQueue<String> animals = new ArrayBlockingQueue<>(5);
animals.add("Dog");
animals.offer("Cat");
animals.offer("Horse");
System.out.println("ArrayBlockingQueue: " + animals);

Sortie : ArrayBlockingQueue: [Dog, Cat, Horse]

Accéder aux Éléments

String head = animals.peek();
System.out.println("Élément tête: " + head);
Iterator<String> it = animals.iterator();
while (it.hasNext()) {
    System.out.print(it.next() + ", ");
}

Sortie : Élément tête: Dog suivi de la liste des éléments.

Supprimer des Éléments

String removed1 = animals.remove();
String removed2 = animals.poll();
animals.clear();
System.out.println("File mise à jour: " + animals);

Sortie : File mise à jour: []


Opérations de Blocage : put() et take()

Ces méthodes sont essentielles pour les patterns producteur-consommateur. Elles bloquent jusqu'à ce que l'opération puisse être effectuée, assurant la coordination des threads.

put()

Insère un élément, en attendant si la file est pleine. Peut lever InterruptedException.

try {
    animals.put("Dog");
    animals.put("Cat");
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

take()

Supprime et retourne la tête, en attendant si la file est vide. Peut lever InterruptedException.

try {
    String element = animals.take();
    System.out.println("Supprimé: " + element);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}

Méthodes Utilitaires Supplémentaires

MéthodeDescription
contains(Object o)Retourne true si la file contient l'élément spécifié.
size()Retourne le nombre actuel d'éléments.
toArray()Convertit la file en tableau.
toString()Représentation en chaîne de la file.

Pourquoi Utiliser ArrayBlockingQueue?

Parce qu'elle offre :

Quand un thread produit plus lentement que le consommateur, ce dernier bloque automatiquement, évitant le busy-waiting et assurant une utilisation efficace du CPU.

Java

  1. Maîtriser les opérateurs Java : Types, syntaxe et exemples pratiques
  2. Commentaires Java : Types, utilisation et bonnes pratiques
  3. Maîtriser la boucle for améliorée en Java : Syntaxe, exemples et bonnes pratiques
  4. Maîtriser les chaînes de caractères en Java : Création, méthodes et bonnes pratiques
  5. Maîtriser les interfaces Java : concepts, implémentation et bonnes pratiques
  6. Maîtriser les classes internes anonymes en Java : définition, syntaxe et exemples pratiques
  7. Maîtriser le try-with-resources Java : gestion automatique des ressources expliquée
  8. Annotations Java expliquées : types, placement et exemples pratiques
  9. Assertions Java : guide pratique pour détecter les bugs et assurer la fiabilité du code