Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung ConcurrentMap | Synchronisierte Sammlungen
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
Herausforderung ConcurrentMap

Aufgabe:

Realisierung eines multithreaded Systems zur Erfassung von Seitenbesuchen.

Beschreibung:

Es ist notwendig, ein Programm zu erstellen, um die Anzahl der Besuche auf verschiedenen Seiten der Website zu verfolgen. Das Programm sollte in einer multithreaded Umgebung korrekt arbeiten, in der mehrere Threads gleichzeitig Besuchszähler für verschiedene Seiten erhöhen können.

Anforderungen:

  • Verwenden Sie ConcurrentHashMap, um Daten über Seitenbesuche zu speichern;
  • Implementieren Sie eine Methode, die die Besuchszahl für eine gegebene Seite erhöht. incrementVisit();
  • Implementieren Sie eine Methode, die die aktuelle Besuchszahl für eine gegebene Seite zurückgibt. getVisitCount();
  • Erstellen Sie mehrere Threads, die die Besuchszahlen gleichzeitig erhöhen. (Dies wird in der Main Klasse implementiert, Sie müssen herausfinden, was dort vor sich geht).

Hinweise:

  • Verwenden Sie ConcurrentHashMap, um Daten zu speichern, wobei der Schlüssel die URL der Seite und der Wert die Besuchszahl ist;
  • Verwenden Sie compute() oder merge() Methoden, um Zähler atomar zu aktualisieren in ConcurrentHashMap.

Sie müssen die Methoden in der Klasse PageVisitCounterImpl vervollständigen und dann die Tests in der Klasse PageVisitCounterTest ausführen.

Nachdem Sie die Aufgabe erfolgreich abgeschlossen haben, sollten alle Tests bestehen.

Hinweis

Nachdem Sie alles korrekt gemacht haben, können Sie versuchen, die Zeile zu bearbeiten, in der ConcurrentMap in der Klasse PageVisitCounterImpl deklariert ist, und sehen, was passiert.

Das heißt, Sie müssen diese Zeile hier mit der ConcurrentMap-Implementierung ersetzen.

java

Main

copy
1
private final ConcurrentMap<String, Integer> visitCounts = new ConcurrentHashMap<>();

Bei diesem hier mit der Realisierung des üblichen Map

java

Main

copy
1
private final Map<String, Integer> visitCounts = new HashMap<>();

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

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