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 BlockingQueue : Files Thread-Safe avec Opérations de Blocage

Java BlockingQueue

Ce guide explore l'interface Java BlockingQueue, ses implémentations, catégories de méthodes et utilisation réelle.

L'interface BlockingQueue, partie du framework Java Collections, étend Queue et l'augmente avec un comportement de blocage. Les opérations d'insertion et de suppression attendront automatiquement jusqu'à ce que l'état de la file permette l'action.

Par exemple, tenter de supprimer un élément d'une file vide bloquera le thread appelant jusqu'à ce qu'un élément devienne disponible, assurant une coordination sûre entre producteurs et consommateurs.


Implémentations Concrètes

Puisque BlockingQueue est une interface, des classes concrètes fournissent la fonctionnalité réelle :


Utilisation de BlockingQueue

Importez le package avant de créer des instances :

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

Exemples d'instances :

// Implémentation par tableau de BlockingQueue
BlockingQueue<String> animal1 = new ArrayBlockingQueue<>(10);
// Implémentation par liste chaînée de BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

Les deux objets supportent toutes les méthodes définies par l'interface BlockingQueue.


Catégories de Méthodes

Les méthodes de BlockingQueue sont groupées selon leur réaction quand la file est pleine ou vide :

Méthodes Lèvant des Exceptions

Méthodes Retournant une Valeur

Variantes temporisées

offer et poll supportent les timeouts :

boolean success = queue.offer(item, 100, TimeUnit.MILLISECONDS);

Dans cet exemple, la méthode tente d'insérer item pendant jusqu'à 100 millisecondes, retournant false si l'opération expire. Les unités de temps supportées incluent days, hours, minutes, seconds, milliseconds, microseconds et nanoseconds.

Méthodes de Blocage

Ces méthodes sont essentielles pour les patterns producteur-consommateur où les threads doivent se synchroniser sans busy-waiting.


Exemple ArrayBlockingQueue

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ArrayBlockingQueue;
public class Main {
    public static void main(String[] args) {
        // Créer une blocking queue bornée avec capacité 5
        BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);
        try {
            // Insérer des éléments – bloquera si la file devient pleine
            numbers.put(2);
            numbers.put(1);
            numbers.put(3);
            System.out.println("BlockingQueue: " + numbers);
            // Supprimer un élément – bloquera si la file est vide
            int removedNumber = numbers.take();
            System.out.println("Nombre Supprimé: " + removedNumber);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            System.err.println("Opération interrompue: " + e.getMessage());
        }
    }
}

Sortie

BlockingQueue: [2, 1, 3] Nombre Supprimé: 2

Pour plus de détails, consultez la documentation officielle Java sur ArrayBlockingQueue.


Pourquoi Utiliser BlockingQueue?

L'avantage principal de BlockingQueue est sa sécurité de thread inhérente. Elle élimine le besoin de synchronisation explicite quand plusieurs threads produisent et consomment des données simultanément.

Considérez un thread producteur qui insère des éléments plus lentement qu'un thread consommateur qui les retire. Sans comportement de blocage, le consommateur pourrait lever des exceptions ou tourner dans une boucle busy-wait. Une BlockingQueue suspend automatiquement le consommateur jusqu'à ce que le producteur rende de nouvelles données disponibles, et vice versa.

En tirant parti de ces mécanismes de blocage intégrés, les développeurs peuvent construire des applications concurrentes robustes et scalables avec un minimum de code boilerplate.

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