Cet article analyse principalement la méthode du problème producteur-consommateur en Java avec des exemples. Les amis qui en ont besoin peuvent s'y référer
Le problème producteur et consommateur est un problème classique dans le modèle thread : producteur et consommateurs. partagent le même espace de stockage pendant la même période. Comme le montre la figure ci-dessous, le producteur stocke les données dans l'espace et le consommateur récupère les données. S'il n'y a pas de coordination, les situations suivantes peuvent se produire :
. Stockage L'espace est plein et les producteurs l'occupent. Les consommateurs attendent que les producteurs libèrent de l'espace et retirent ainsi des produits. Les producteurs attendent que les consommateurs consomment des produits, ajoutant ainsi des produits à l'espace. Attendez-vous les uns les autres, ce qui entraîne une impasse.
L'exemple suivant montre comment résoudre le problème producteur/consommateur via des threads :
/* author by w3cschool.cc ProducerConsumerTest.java */ public class ProducerConsumerTest { public static void main(String[] args) { CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c, 1); Consumer c1 = new Consumer(c, 1); p1.start(); c1.start(); } } class CubbyHole { private int contents; private boolean available = false; public synchronized int get() { while (available == false) { try { wait(); } catch (InterruptedException e) { } } available = false; notifyAll(); return contents; } public synchronized void put(int value) { while (available == true) { try { wait(); } catch (InterruptedException e) { } } contents = value; available = true; notifyAll(); } } class Consumer extends Thread { private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) { cubbyhole = c; this.number = number; } public void run() { int value = 0; for (int i = 0; i < 10; i++) { value = cubbyhole.get(); System.out.println("消费者 #" + this.number+ " got: " + value); } } } class Producer extends Thread { private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) { cubbyhole = c; this.number = number; } public void run() { for (int i = 0; i < 10; i++) { cubbyhole.put(i); System.out.println("生产者 #" + this.number + " put: " + i); try { sleep((int)(Math.random() * 100)); } catch (InterruptedException e) { } } } }
Le résultat de l'exécution du code ci-dessus est :
消费者 #1 got: 0 生产者 #1 put: 0 生产者 #1 put: 1 消费者 #1 got: 1 生产者 #1 put: 2 消费者 #1 got: 2 生产者 #1 put: 3 消费者 #1 got: 3 生产者 #1 put: 4 消费者 #1 got: 4 生产者 #1 put: 5 消费者 #1 got: 5 生产者 #1 put: 6 消费者 #1 got: 6 生产者 #1 put: 7 消费者 #1 got: 7 生产者 #1 put: 8 消费者 #1 got: 8 生产者 #1 put: 9 消费者 #1 got: 9
[Recommandations associées]
2.Tutoriel vidéo Java de la Geek Academy
3Tutoriel de développement FastJson.
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!