Qu'est-ce que Thread-Safe BlockingQueue en Java ? Quand faut-il l'utiliser ? Mise en œuvre jointe

Publié: 2021-04-30
Qu'est-ce que Threadsafe BlockingQueue en Java et quand l'utiliser

Jusqu'à présent, j'ai écrit deux articles sur le concept Producteur Consommateur sur Crunchify. Le 1er pour expliquer Java Semaphore et Mutex et le 2ème pour expliquer Concurrent Read/Write.

Dans ce didacticiel Java, nous passerons en revue le même concept Producteur/Consommateur pour expliquer la BlockingQueue in Java .

Quels sont les avantages de Blocking Queue en Java ?

Une file d'attente java.util.Queue prend en charge les opérations qui attendent que la file d'attente ne soit plus vide lors de la récupération d'un élément et attendent que de l'espace se libère dans la file d'attente lors du stockage d'un élément.

java.util.BlockingQueue en java - Crunchify

Nous devons créer quatre classes Java :

  1. CrunchifyMessage.java pour mettre et recevoir un message
  2. CrunchifyBlockingProducer.java pour mettre le message dans la file d'attente
  3. CrunchifyBlockingConsumer.java pour obtenir le message de la file d'attente
  4. CrunchifyBlockingMain.java pour démarrer le test

Les implémentations de BlockingQueue sont thread-safe . Toutes les méthodes de mise en file d'attente sont de nature atomique et utilisent des verrous internes.

Commençons par l'implémentation de Thread-Safe BlockingQueue en Java

Étape 1

Créez la classe CrunchifyMessage.java . Il s'agit d'un simple objet Java.

Étape 2

Créez le producteur CrunchifyBlockingProducer.java qui a créé un message simple et l'a mis en file d'attente.

Étape 3

Créez la classe CrunchifyBlockingConsumer.java qui consomme les messages de la file d'attente.

Étape 4

Créez une méthode CrunchifyBlockingMain.java simple qui exécute le test BlockingQueue. Exécutez ce programme pour vérifier le comportement de BlockingQueue.

Une BlockingQueue n'accepte pas les éléments nuls . Les implémentations lancent NullPointerException sur les tentatives d' ajout , de placement ou d'offre d' un null .

Une valeur nulle est utilisée comme valeur sentinelle pour indiquer l'échec des opérations d' interrogation .

Résultat:

Quand devrions-nous utiliser java.util.concurrent.BlockingQueue ?

  • Lorsque vous souhaitez limiter une sorte de demande entrante, vous devez utiliser le même
  • Un producteur peut prendre une longueur d'avance sur les consommateurs avec une file d'attente illimitée. Si le consommateur ne rattrape pas le producteur, cela peut provoquer une OutOfMemoryError . Dans de telles situations, il peut être préférable de signaler à un producteur potentiel que la file d'attente est pleine et d'abandonner rapidement en cas d'échec.
    • Autrement dit : les producteurs sont naturellement étranglés.
  • La file d'attente de blocage est normalement utilisée dans les applications simultanées
  • Il fournit une implémentation correcte et thread-safe
  • La consommation de mémoire doit également être limitée