Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Produzent-Konsument | Best Practices für Multithreading
Multithreading in Java
course content

Kursinhalt

Multithreading in Java

Multithreading in Java

1. Grundlagen der Multithread-Verarbeitung
2. Synchronisierte Sammlungen
3. Hochrangige Synchronisationsmechanismen
4. Best Practices für Multithreading

book
Produzent-Konsument

Großartige Arbeit! Sie haben einen langen Weg zurückgelegt, und wir haben viele theoretische und praktische Beispiele erkundet!

Möglicherweise sind Sie dem Producer-Consumer-Muster in anderen Abschnitten begegnet, aber Sie haben es vielleicht nicht bemerkt. In diesem Abschnitt werden wir es im Detail besprechen, und wenn etwas aus den vorherigen Beispielen unklar war, wird es in diesem Abschnitt klar werden!

Das Producer-Consumer Muster umfasst zwei Arten von Threads, die aus dem Namen klar hervorgehen: Producer und Consumer.

Der Producer wird einige Daten erzeugen, die er in einen gemeinsamen Puffer/Warteschlange einfügt, auf den auch der Consumer Zugriff hat, und er wird diese Daten einfach aus dem Datenspeicherort konsumieren.

Hinweis

Das Hauptziel des Musters ist es, die Produktion und den Verbrauch von Daten zu trennen, sodass Produzenten unabhängig von Konsumenten arbeiten können.

Wo es verwendet wird

Dieses Muster wird häufig in Systemen eingesetzt, in denen eine asynchrone Datenverarbeitung erforderlich ist. Wir werden später im Detail erforschen, was asynchrony bedeutet.

In der Praxis wird dieses Muster häufig für Ereignisverarbeitungssysteme, Datenprotokollierung, Netzwerkanforderungsbearbeitung und parallele Datenverarbeitung verwendet.

Stellen Sie sich ein Fließband in einer Fabrik vor, bei dem ein Arbeiter Teile auf das Fließband legt (Produzent) und ein anderer Arbeiter sie entfernt und zu einem Produkt zusammenbaut (Konsument). Der Produzent und der Konsument könnten mit unterschiedlichen Geschwindigkeiten arbeiten, aber das Fließband (Puffer) hilft ihnen, synchron zu bleiben.

Wie sieht es im Code aus?

Betrachten wir ein Beispiel für die Verwendung von BlockingQueue, um das Producer-Consumer-Muster zu implementieren.

Hinweis

Sie können zwischen den Tabs wechseln, und so greifen Sie auf den Code zu, den Sie benötigen.

java

ExampleProducerConsumer

java

Consumer

java

Producer

copy
12345678910
public class ExampleProducerConsumer { public static void main(String[] args) { BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(); // Shared queue Thread producerThread = new Thread(new Producer(queue)); Thread consumerThread = new Thread(new Consumer(queue)); producerThread.start(); // Start producer thread consumerThread.start(); // Start consumer thread } }

Dieses Programm zeigt das Producer-Consumer-Muster, indem es BlockingQueue verwendet, um sichere Interaktionen zwischen Threads zu gewährleisten.

Eine BlockingQueue wird eingerichtet, um als gemeinsamer Puffer für die Producer- und Consumer-Threads zu fungieren.

Die Producer-Klasse erzeugt Zahlen von 0 bis 9 und fügt sie der Warteschlange hinzu, und platziert dann einen Signalwert von -1, um anzuzeigen, dass die Produktion abgeschlossen ist.

Die Consumer-Klasse ruft wiederholt Zahlen aus der Warteschlange ab. Wenn sie den -1-Signalwert trifft, hört sie auf zu konsumieren.

In der Hauptmethode wird die gemeinsame Warteschlange initialisiert, und die Producer- und Consumer-Threads werden erstellt und gestartet. Der Producer fügt der Warteschlange Elemente hinzu, während der Consumer diese Elemente verarbeitet.

Warum wird es verwendet?

Das Producer-Consumer-Muster wird verwendet, um mehrere Ziele zu erreichen:

  • Thread-Synchronisation: Ermöglicht es Threads, Daten auf sichere Weise auszutauschen;
  • Leistungsverbesserung: Produzenten und Konsumenten können parallel arbeiten, ohne sich gegenseitig zu blockieren;
  • Pufferung: Ein Puffer hilft, Unterschiede in der Produktions- und Verbrauchsgeschwindigkeit auszugleichen.

Hinweis

Das Producer-Consumer-Muster hilft, eine sichere und effiziente Interaktion zwischen Threads in der Multithread-Programmierung zu organisieren. Es ermöglicht Produzenten und Konsumenten, unabhängig zu arbeiten, indem ein Puffer zur Synchronisation verwendet wird, was die Leistung verbessert und Blockierungen verhindert.

1. Welche Rolle erfüllt die Producer-Klasse im Producer-Consumer-Muster?

2. Was bewirkt der Signalwert -1 im gegebenen Beispielprogramm?

Welche Rolle erfüllt die Producer-Klasse im Producer-Consumer-Muster?

Welche Rolle erfüllt die Producer-Klasse im Producer-Consumer-Muster?

Wählen Sie die richtige Antwort aus

Was bewirkt der Signalwert -1 im gegebenen Beispielprogramm?

Was bewirkt der Signalwert -1 im gegebenen Beispielprogramm?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 1
We're sorry to hear that something went wrong. What happened?
some-alt