English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base Java

Contrôle de flux Java

Java Tableau

Java Orienté Objet (I)

Java Orienté Objet (II)

Java Orienté Objet (III)

Gestion des exceptions Java

Java Liste (List)

Java Queue (File d'attente)

Java Map Set

Java Set Set

Java Input/Output (I)/O)

Java Reader/Writer

Autres sujets Java

Java BlockingQueue

Dans ce tutoriel, nous allons apprendre l'interface Java BlockingQueue et ses méthodes.

L'interface BlockingQueue du cadre Java Collections étend l'interface Queue. Elle permet à toute opération de s'attendre jusqu'à ce qu'elle soit exécutée avec succès.

Par exemple, si nous devons supprimer un élément d'une file vide, la file bloquée permet à l'opération de suppression de s'attendre jusqu'à ce que la file contienne certains éléments à supprimer.

Classes qui implémentent BlockingQueue

Comme BlockingQueue est une interface, nous ne pouvons pas fournir une implémentation directe.

Pour utiliser les fonctionnalités de BlockingQueue, nous devons utiliser les classes qui l'implémentent.

Comment utiliser la file bloquée ?

Nous devons importer le paquet java.util.concurrent.BlockingQueue pour utiliser BlockingQueue.

//Implémentation Array de BlockingQueue
BlockingQueue<String> animal1 = new ArraryBlockingQueue<>();
//Implémentation LinkedList de BlockingQueue
BlockingQueue<String> animal2 = new LinkedBlockingQueue<>();

Dans ce cas, nous créons respectivement les objets animal de la classe ArrayBlockingQueue et LinkedBlockingQueue1et animal2Ces objets peuvent utiliser les fonctionnalités de l'interface BlockingQueue.

Méthodes de BlockingQueue

Selon que la file est pleine ou vide, les méthodes de la file bloquée peuvent être divisées en3Classe :

Méthode qui lève une exception

  • add() - Insérer l'élément à la fin de la file bloquée. Si la file est pleine, lève une exception.

  • element() - Retourner l'élément en tête de la file bloquée. Si la file est vide, lève une exception.

  • remove() -Supprimer un élément de la file bloquée. Si la file est vide, lève une exception.

Méthode de retour d'une valeur

  • offer() - Insérer l'élément spécifié à la fin de la file bloquée. Si la file est pleine, retourner false.

  • peek() - Retourner l'élément en tête de la file bloquée. Si la file est vide, retourner null.

  • poll() - Supprimer un élément de la file bloquée. Si la file est vide, retourner null.

offer() et poll()Plus de contenu

offer() et poll() peuvent être utilisés avec un délai d'attente. Autrement dit, nous pouvons passer des unités de temps en tant que paramètres. Par exemple,

offer(value, 100, milliseconds)

Ici,

  • value est l'élément à insérer dans la file

  • et nous définissons le délai d'attente sur100 millisecondes

Cela signifie que la méthode offer() essaie d'insérer un élément dans la file bloquante pendant100 millisecondes. Si10Impossible d'insérer un élément en moins de 0 millisecondes, cette méthode retourne false.

Remarque :En plus des millisecondes, nous pouvons utiliser les unités de temps suivantes dans les méthodes offer() et poll() : jours, heures, minutes, secondes, microsecondes et nanosecondes.

Méthodes d'opération de BlockingQueue

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

  • put() - Insérer un élément dans la file bloquante. Si la file est pleine, elle attendra jusqu'à ce qu'il y ait de la place pour insérer l'élément.

  • take() - Supprimer et renvoyer un élément de la file bloquante. Si la file est vide, elle attendra jusqu'à ce qu'il y ait un élément à supprimer dans la file.

Supposons que nous voulions insérer un élément dans la file. Si la file est pleine, la méthode put() attendra jusqu'à ce que la file ait de la place pour insérer l'élément.

De même, si nous voulons supprimer un élément de la file. Si la file est vide, la méthode take() attendra jusqu'à ce que la file contienne l'élément à 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) {
      //Créer une file bloquante en utilisant ArrayBlockingQueue
      BlockingQueue<Integer> numbers = new ArrayBlockingQueue<>(5);
      try {
        //Insérer un élément dans la file bloquante
        numbers.put(2);
        numbers.put(1);
        numbers.put(3);
        System.out.println("FileBloquante: " + numbers);
        //Supprimer un élément de la file bloquante
        int removedNumber = numbers.take();
        System.out.println("Removed Number: ") + removedNumber);
      }
      catch(Exception e) {
          e.getStackTrace();
      }
    }
}

Output result

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

To learn more about ArrayBlockingQueue, please visitJava ArrayBlockingQueue.

Why choose BlockingQueue?

In Java, BlockingQueue is consideredThread-safeCollection. This is because it may be helpful in multi-threaded operations.

Suppose one thread is inserting elements into the queue, while another thread is deleting elements from the queue.

Now, if the first thread runs slower, the blocking queue can make the second thread wait until the first thread completes its operation.