Comment implémenter l'interface BlockingQueue en Java



Cet article vous fournira une connaissance détaillée et complète de la mise en œuvre d'une interface BlockingQueue en Java.

Une file d'attente est un aspect important de tout langage de programmation. Surtout si on parle de . Dans cet article, nous aborderons l'interface BlockingQueue en Java dans l'ordre suivant:

Qu'est-ce qu'une interface BlockingQueue en Java?

Une interface BlockingQueue en Java est une file d'attente qui se bloque lorsque vous essayez de vous en retirer et que la file d'attente est vide, ou si vous essayez d'y mettre des éléments en file d'attente et que la file d'attente est déjà pleine. Un thread essayant de se retirer d'une file d'attente vide est bloqué jusqu'à ce qu'un autre thread insère un élément dans la file d'attente. Un thread essayant de mettre un élément dans une file d'attente complète est bloqué jusqu'à ce qu'un autre thread fasse de la place dans la file d'attente, soit en retirant un ou plusieurs éléments de la file d'attente, soit en effaçant complètement la file d'attente.





file d

L'interface BlockingQueue en Java n'accepte pasnulvaleurs et jeterNullPointerExceptionsi vous essayez de stocker la valeur nulle dans la file d'attente.Les implémentations Java BlockingQueue sont thread-safe . Toutes les méthodes de mise en file d'attente sont de nature atomique et utilisent des verrous internes ou d'autres formes de contrôle d'accès concurrentiel.



Diagramme de classes de file d'attente Java

L'interface Java Queue étend l'interface Collection. L'interface Collection étend l'interface Iterable. Certaines des classes d'implémentation de file d'attente fréquemment utilisées sont LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue,etc. AbstractQueue fournit une implémentation squelettique de l'interface Queue pour réduire l'effort d'implémentation de Queue.

Types de file d'attente de blocage

Les BlockingQueue sont de deux types:



  • File d'attente illimitée: La capacité de la file d'attente de blocage sera définie sur Integer.MAX_VALUE. Dans le cas d'une file d'attente de blocage illimitée, la file d'attente ne sera jamais bloquée car elle pourrait atteindre une très grande taille. lorsque vous ajoutez des éléments, sa taille augmente.

Syntaxe:
BlockingQueue blocking queue = nouveau LinkedBlockingDeque ()

  • File d'attente limitée: Le deuxième type de file d'attente est la file d'attente limitée. Dans le cas de la file d'attente limitée, vous pouvez créer une file d'attente en contournant la capacité de la file d'attente dans le constructeur de files d'attente:
    Syntaxe:
    // Crée une file d'attente de blocage avec une capacité de 5

BlockingQueue blocking queue = nouveau LinkedBlockingDeque (5)

Méthodes dans l'interface BlockingQueue

Modifier Type Syntaxe de la méthode Utilisé pour La description
booléen ajouter (E et) Insertion

Insère l'élément spécifié dans cette file d'attente s'il est possible de le faire immédiatement sans violer les restrictions de capacité, en retournant true en cas de succès et en lançant une IllegalStateException si aucun espace n'est actuellement disponible.

booléen contient (Objet o) Examiner

Renvoie true si cette file d'attente contient l'élément spécifié.

int drainTo (Collection c) Récupération ou suppression

Supprime tous les éléments disponibles de cette file d'attente et les ajoute à la collection donnée.

int drainTo (Collection c, int maxElements) Récupération ou suppression

Supprime au maximum le nombre donné d'éléments disponibles de cette file d'attente et les ajoute à la collection donnée.

booléen offre (E et) Insertion

Insère l'élément spécifié dans cette file d'attente s'il est possible de le faire immédiatement sans violer les restrictions de capacité, retournant true en cas de succès et false si aucun espace n'est actuellement disponible.

booléen offre (E e, long timeout, unité TimeUnit) Insertion

Insère l'élément spécifié dans cette file d'attente, en attendant le temps d'attente spécifié si nécessaire pour que l'espace devienne disponible.

EST poll (long timeout, unité TimeUnit) Récupération ou suppression

Récupère et supprime la tête de cette file d'attente, en attendant le temps d'attente spécifié si nécessaire pour qu'un élément devienne disponible.

néant mettre (E e) Insertion

Insère l'élément spécifié dans cette file d'attente, en attendant si nécessaire que de l'espace devienne disponible.

que fait .innerhtml
int capacité restante () Examiner

Renvoie le nombre d'éléments supplémentaires que cette file d'attente peut idéalement (en l'absence de contraintes de mémoire ou de ressources) accepter sans blocage, ou Integer.MAX_VALUE s'il n'y a pas de limite intrinsèque.

booléen supprimer (Objet o) + Récupération ou suppression

Supprime une seule instance de l'élément spécifié de cette file d'attente,s'il est présent.

EST prendre() Récupération ou suppression

Récupère et supprime la tête de cette file d'attente, en attendant si nécessaire qu'un élément devienne disponible.

Interface BlockingQueue dans Java Exemple: Service

package com.journaldev.concurrency import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.BlockingQueue public class ProducerConsumerService {public static void main (String [] args) {// Création de BlockingQueue de taille 10 BlockingQueue queue = new ArrayBlockingQueue ( 10) Producteur producteur = nouveau producteur (file d'attente) Consommateur consommateur = nouveau consommateur (file d'attente) // démarrage du producteur pour produire des messages dans la file d'attente nouveau Thread (producteur) .start () // consommateur commençant à consommer les messages de la file d'attente nouveau Thread (consommateur) .start () System.out.println ('Producer and Consumer a été démarré')}}

Avec cela, nous arrivons à la fin de l'article BlockingQueue Interface en Java. J'espère que tous vos concepts sont désormais clairs.

Vérifiez par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels qui souhaitent devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate & Spring.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de ce blog «BlockingQueue Interface en Java» et nous vous répondrons dans les plus brefs délais.