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

File d'attente de blocage Java

File d'attente de blocage Java

Dans ce didacticiel, nous découvrirons l'interface Java BlockingQueue et ses méthodes.

Le BlockingQueue interface du Java Collections framework étend le Queue interface. Il permet à toute opération d'attendre jusqu'à ce qu'elle puisse être effectuée avec succès.

Par exemple, si nous voulons supprimer un élément d'une file d'attente vide, la file d'attente de blocage permet à l'opération de suppression d'attendre que la file d'attente contienne des éléments à supprimer.

Classes qui implémentent BlockingQueue

Depuis BlockingQueue est une interface, nous ne pouvons pas en fournir l'implémentation directe.

Afin d'utiliser la fonctionnalité du BlockingQueue , nous devons utiliser des classes qui l'implémentent.

  • ArrayBlockingQueue
  • LinkedBlockingQueue

Comment utiliser les files d'attente de blocage ?

Il faut importer le java.util.concurrent.BlockingQueue package afin d'utiliser BlockingQueue .

// Array implementation of BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();

// LinkedList implementation of BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

Ici, nous avons créé des objets animal1 et animal2 de classes ArrayBlockingQueue et LinkedBlockingQueue , respectivement. Ces objets peuvent utiliser les fonctionnalités du BlockingQueue interface.

Méthodes de BlockingQueue

Selon qu'une file d'attente est pleine ou vide, les méthodes d'une file d'attente de blocage peuvent être divisées en 3 catégories :

Méthodes qui lèvent une exception

  • add() - Insère un élément dans la file d'attente de blocage à la fin de la file d'attente. Lève une exception si la file d'attente est pleine.
  • element() - Renvoie la tête de la file d'attente de blocage. Lève une exception si la file d'attente est vide.
  • remove() - Supprime un élément de la file d'attente de blocage. Lève une exception si la file d'attente est vide.

Méthodes qui renvoient une certaine valeur

  • offer() - Insère l'élément spécifié dans la file d'attente de blocage à la fin de la file d'attente. Renvoie false si la file d'attente est pleine.
  • peek() - Renvoie la tête de la file d'attente de blocage. Renvoie null si la file d'attente est vide.
  • poll() - Supprime un élément de la file d'attente de blocage. Renvoie null si la file d'attente est vide.

Plus d'informations sur l'offre() et le sondage()

Le offer() et poll() La méthode peut être utilisée avec des délais d'attente. Autrement dit, nous pouvons passer des unités de temps en tant que paramètre. Par exemple,

offer(value, 100, milliseconds)

Ici,

  • valeur est l'élément à insérer dans la file d'attente
  • Et nous avons défini un délai d'attente de 100 millisecondes

Cela signifie le offer() la méthode essaiera d'insérer un élément dans la file d'attente de blocage pour 100 millisecondes. Si l'élément ne peut pas être inséré en 100 millisecondes, la méthode renvoie false .

Remarque : Au lieu de milliseconds , nous pouvons également utiliser ces unités de temps :days , hours , minutes , seconds , microseconds et nanoseconds en offer() et poll() méthodes.

Méthodes qui bloquent l'opération

Le BlockingQueue fournit également des méthodes pour bloquer les opérations et attendre si la file d'attente est pleine ou vide.

  • put() - Insère un élément dans la file d'attente de blocage. Si la file d'attente est pleine, il attendra que la file d'attente dispose d'espace pour insérer un élément.
  • take() - Supprime et renvoie un élément de la file d'attente de blocage. Si la file d'attente est vide, il attendra jusqu'à ce que la file d'attente ait des éléments à supprimer.

Supposons que nous voulions insérer des éléments dans une file d'attente. Si la file d'attente est pleine alors le put() attendra que la file d'attente dispose d'espace pour insérer des éléments.

De même, si nous voulons supprimer des éléments d'une file d'attente. Si la file d'attente est vide alors le take() attendra que la file d'attente contienne des éléments à supprimer.

Implémentation de BlockingQueue dans ArrayBlockingQueue

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

class Main {

    public static void main(String[] args) {
      // Create a blocking queue using the ArrayBlockingQueue
      BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);

      try {
        // Insert element to blocking queue
        numbers.put(2);
        numbers.put(1);
        numbers.put(3);
        System.out.println("BLockingQueue: " + numbers);

        // Remove Elements from blocking queue
        int removedNumber = numbers.take();
        System.out.println("Removed Number: " + removedNumber);
      }

      catch(Exception e) {
          e.getStackTrace();
      }
    }
}

Sortie

BlockingQueue: [2, 1, 3]
Removed Element: 2

Pour en savoir plus sur ArrayBlockingQueue , visitez Java ArrayBlockingQueue.

Pourquoi BlockingQueue ?

En Java, BlockingQueue est considéré comme le thread-safe le recueil. C'est parce qu'il peut être utile dans les opérations multi-threading.

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

Désormais, si le premier thread s'exécute plus lentement, la file d'attente de blocage peut faire attendre le deuxième thread jusqu'à ce que le premier thread termine son opération.


Java

  1. Opérateurs Java
  2. Commentaires Java
  3. Java pour chaque boucle
  4. Chaînes Java
  5. InterfaceJava
  6. Classe anonyme Java
  7. Java essayer avec des ressources
  8. Annotations Java
  9. Assertions Java