Maison >Java >javaDidacticiel >Comment implémenter des threads producteur/consommateur avec une file d'attente ?

Comment implémenter des threads producteur/consommateur avec une file d'attente ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 14:54:12223parcourir

How to Implement Producer/Consumer Threads with a Queue?

Threads producteur/consommateur avec une file d'attente

Pour établir un thread producteur/consommateur avec une file d'attente, il existe deux composants principaux : des services d'exécution et, si nécessaire, un blocage file d'attente.

Services d'exécuteur

Commencez par placer tous les producteurs dans un seul service d'exécuteur. et tous les consommateurs dans un autre.

File d'attente de blocage

Si la communication entre les services est nécessaire, utilisez une file d'attente de blocage. Par exemple :

final ExecutorService producers = Executors.newFixedThreadPool(100);
final ExecutorService consumers = Executors.newFixedThreadPool(100);
while (/* has more work */) {
  producers.submit(...);
}
producers.shutdown();
producers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
consumers.shutdown();
consumers.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);

Considérations sur la mise en œuvre

Les threads producteurs soumettent des tâches directement aux threads consommateurs, plutôt que d'utiliser une file d'attente de blocage distincte pour la communication. Cette approche simplifie la mise en œuvre tout en maintenant la concurrence et l'efficacité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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