Maison >
Java >
javaDidacticiel >
File d'attente de blocage Java Analyse de l'instance BlockingQueue
File d'attente de blocage Java Analyse de l'instance BlockingQueue
王林
Libérer: 2023-04-25 15:13:15
avant
1197 Les gens l'ont consulté
Types de files d'attente
File d'attente illimitéeAucune limite de capacité, changements uniquement avec le stockage
File d'attente limitéeDéfinit la capacité maximale
Ajouter des éléments à la file d'attente infinie Toutes les opérations ne bloqueront jamais (également les threads -safe), il peut donc atteindre de très grandes capacités. Utiliser une file d'attente de blocage infinie BlockingQueue La chose la plus importante lors de la conception d'un modèle producteur-consommateur est que le consommateur doit pouvoir consommer les messages aussi vite que le producteur ajoute des messages à la file d'attente. Sinon, la mémoire pourrait être insuffisante et une exception OutOfMemory pourrait être levée.
Structure des données
1. Généralement implémentée à l'aide de listes chaînées ou de tableaux
2 Généralement avec des caractéristiques FIFO (premier entré, premier sorti), elle peut également être conçue comme une file d'attente à double extrémité
. 3. Les principales opérations de la file d'attente : Entrée et retrait de la file d'attente
Blocking Queue BlockingQueue
Définition : Dans la communication des threads, à tout moment, quelle que soit la hauteur de la concurrence, sur une seule JVM, un seul thread peut toujours entrer dans la file d'attente en même temps. Opérations de mise en file d'attente ou de retrait de la file d'attente. BlockingQueue peut être partagé entre les threads sans aucune synchronisation explicite. Types de files d'attente de blocage :
Wait
File d'attente de blocage commune
ArrayBlockingQueue :
File d'attente limitée prise en charge par array
Scénarios d'application :
Il existe de nombreuses applications. et des modèles producteur-consommateur dans le pool de threads
Principe de fonctionnement :
Basé sur ReentrantLock pour garantir la sécurité des threads et implémenter le blocage lorsque la file d'attente est pleine selon la condition
LinkedBlockingQueue : File d'attente illimitée basé sur une liste chaînée (théoriquement délimitée)
Priority BlockingQueue :
File d'attente prioritaire illimitée prise en charge par le tas prioritaire PriorityQueue et file d'attente illimitée basée sur l'implémentation de l'expansion du tableau
Utilisation :
Les objets ajoutés à la file d'attente doivent implémenter l'interface Delayed, et Delayed est intégré à partir de l'interface Comparable
Scénarios d'application :
Vente de billets de cinéma , etc.
Principe de fonctionnement :
La file d'attente sera traitée en interne selon le temps Trié par priorité. Retarder l’exécution du cycle du pool de threads de classe.
Ils implémentent tous l'interface BlockingQueue, avec les méthodes put() et take()
La méthode de création est la suivante :
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<> (666);
Copier après la connexion
BlockingQueue API
Ajouter des éléments :
method
.
Signification
add()Si l'insertion est réussie, retournez true, sinon une exception IllegalStateException sera levée
put()
Insérez l'élément spécifié dans la file d'attente Si la file d'attente est pleine, il bloquera jusqu'à ce qu'il y ait de l'espace pour insérer
offer()
Renvoie vrai si l'insertion est réussie, sinon renvoie faux
offer(E e, long timeout, unité TimeUnit)
Essayez d'insérer des éléments dans la file d'attente. Si la file d'attente est pleine, elle se bloquera jusqu'à ce qu'il y ait une insertion spatiale, le blocage a un contrôle temporel.
Récupérez l'élément de tête de la file d'attente et supprimez-le si la file d'attente est vide, puis bloque et attend que l'élément devienne disponible
poll (long timeout, unité TimeUnit)
Récupérez et supprimez la tête de la file d'attente, si nécessaire, attendez le temps d'attente spécifié pour rendre l'élément disponible, et revenez s'il expire null
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn