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.
Commencez par placer tous les producteurs dans un seul service d'exécuteur. et tous les consommateurs dans un autre.
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);
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!