Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Herausforderung: Concurrentmap | Synchronisierte Collections
Multithreading in Java

bookHerausforderung: Concurrentmap

Aufgabe:

Implementierung eines multithreaded Systems zur Erfassung von Seitenaufrufen.

Beschreibung:

Es soll ein Programm erstellt werden, das die Anzahl der Aufrufe verschiedener Seiten einer Website erfasst. Das Programm muss in einer multithreaded Umgebung korrekt funktionieren, in der mehrere Threads gleichzeitig die Aufrufzähler für verschiedene Seiten erhöhen können.

Anforderungen:

  • Verwendung von ConcurrentHashMap zur Speicherung der Daten über Seitenaufrufe;
  • Implementierung einer Methode, die den Aufrufzähler für eine bestimmte Seite erhöht. incrementVisit();
  • Implementierung einer Methode, die den aktuellen Aufrufzähler für eine bestimmte Seite zurückgibt. getVisitCount();
  • Erstellung von mehreren Threads, die die Aufrufzähler gleichzeitig erhöhen. (Dies wird in der Klasse Main implementiert, analysieren Sie, was dort geschieht).

Hinweise:

  • Verwendung von ConcurrentHashMap zur Speicherung der Daten, wobei der Schlüssel die URL der Seite und der Wert der Aufrufzähler ist;
  • Nutzung der Methoden compute() oder merge(), um Zähler atomar zu aktualisieren in der ConcurrentHashMap.

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

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

Note
Hinweis

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

Das heißt, Sie müssen diese Zeile hier durch die Implementierung von ConcurrentMap ersetzen.

Main.java

Main.java

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

In diesem Fall mit der Implementierung des üblichen Map

Main.java

Main.java

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

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Awesome!

Completion rate improved to 3.33

bookHerausforderung: Concurrentmap

Swipe um das Menü anzuzeigen

Aufgabe:

Implementierung eines multithreaded Systems zur Erfassung von Seitenaufrufen.

Beschreibung:

Es soll ein Programm erstellt werden, das die Anzahl der Aufrufe verschiedener Seiten einer Website erfasst. Das Programm muss in einer multithreaded Umgebung korrekt funktionieren, in der mehrere Threads gleichzeitig die Aufrufzähler für verschiedene Seiten erhöhen können.

Anforderungen:

  • Verwendung von ConcurrentHashMap zur Speicherung der Daten über Seitenaufrufe;
  • Implementierung einer Methode, die den Aufrufzähler für eine bestimmte Seite erhöht. incrementVisit();
  • Implementierung einer Methode, die den aktuellen Aufrufzähler für eine bestimmte Seite zurückgibt. getVisitCount();
  • Erstellung von mehreren Threads, die die Aufrufzähler gleichzeitig erhöhen. (Dies wird in der Klasse Main implementiert, analysieren Sie, was dort geschieht).

Hinweise:

  • Verwendung von ConcurrentHashMap zur Speicherung der Daten, wobei der Schlüssel die URL der Seite und der Wert der Aufrufzähler ist;
  • Nutzung der Methoden compute() oder merge(), um Zähler atomar zu aktualisieren in der ConcurrentHashMap.

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

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

Note
Hinweis

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

Das heißt, Sie müssen diese Zeile hier durch die Implementierung von ConcurrentMap ersetzen.

Main.java

Main.java

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

In diesem Fall mit der Implementierung des üblichen Map

Main.java

Main.java

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
some-alt