Javas ConcurrentMap meistern: Thread-sichere Maps erklärt
Java ConcurrentMap-Interface
Lernen Sie, wie Javas ConcurrentMap thread-sichere Map-Operationen liefert, seine Kernmethoden und ein hands-on Beispiel mit ConcurrentHashMap.
Das ConcurrentMap-Interface erweitert java.util.Map und bietet eine hochkonkurrierende, thread-sichere Implementierung einer Map. Es garantiert, dass mehrere Threads gleichzeitig Lese-, Schreib- und Update-Operationen durchführen können, ohne den internen Zustand der Map zu korrumpieren.
Da ConcurrentMap ein Interface ist, können Sie es nicht direkt instanziieren. Die gängigste Implementierung ist java.util.concurrent.ConcurrentHashMap, die lock-freie Reads und feingranulare Locking für Updates bietet.
Klassen, die ConcurrentMap implementieren
Obwohl ConcurrentMap selbst nicht instanziiert werden kann, können Sie eine konkrete Map erstellen, indem Sie eine seiner Implementierungen nutzen. Der De-facto-Standard ist ConcurrentHashMap, aber Alternativen wie ConcurrentSkipListMap existieren für sortierte Map-Anforderungen.

ConcurrentMap verwenden
Zuerst das Interface importieren:
import java.util.concurrent.ConcurrentMap;
Dann eine Instanz von ConcurrentHashMap erstellen:
ConcurrentMap<String, Integer> numbers = new ConcurrentHashMap<>();
In diesem Beispiel ist numbers eine thread-sichere Map, wo jeder String-Schlüssel mit einem Integer-Wert gepaart ist.
Schlüsselkonzepte:
- Key – einzigartiger Identifikator, der auf einen Wert mappt.
- Value – die mit einem Schlüssel assoziierten Daten.
Schlüsselmethoden von ConcurrentMap
Zusätzlich zu allen Standard-Map-Operationen führt ConcurrentMap mehrere atomare, lock-freie Methoden ein:
- putIfAbsent(K key, V value) – Fügt Schlüssel/Wert-Paar nur hinzu, falls Schlüssel nicht bereits vorhanden.
- compute(K key, BiFunction) – Aktualisiert Wert für angegebenen Key atomar basierend auf aktuellem Wert.
- computeIfAbsent(K key, Function) – Generiert Wert für fehlenden Key mittels übergebener Funktion.
- computeIfPresent(K key, BiFunction) – Aktualisiert Wert existierendes Keys atomar.
- forEach(BiConsumer) – Führt Aktion für jeden Eintrag aus.
- merge(K key, V value, BiFunction) – Kombiniert neuen Wert mit existierendem via übergebener Funktion.
Für tiefere Referenz siehe die offizielle Java-Dokumentation.
ConcurrentHashMap mit ConcurrentMap nutzen
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentHashMap; public class Main { public static void main(String[] args) { // Thread-sichere Map erstellen ConcurrentMap<String, Integer> numbers = new ConcurrentHashMap<>(); // Elemente einfügen numbers.put("Two", 2); numbers.put("One", 1); numbers.put("Three", 3); System.out.println("ConcurrentMap: " + numbers); // Wert abrufen int value = numbers.get("One"); System.out.println("Accessed Value: " + value); // Schlüssel/Wert-Paar entfernen int removed = numbers.remove("Two"); System.out.println("Removed Value: " + removed); } }
Ausgabe
ConcurrentMap: {One=1, Two=2, Three=3} Accessed Value: 1 Removed Value: 2
Für fortgeschrittene Nutzung konsultieren Sie die ConcurrentHashMap Dokumentation.
Java
- C#-Interfaces meistern: Definition, Implementierung und praktische Anwendungsfälle
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java NavigableSet Interface meistern: Navigation, Sortierung und praktische Beispiele
- Java Lambda Expressions meistern: Von Grundlagen bis Stream API
- Interface vs. Abstrakte Klasse in Java: Die richtige Abstraktion wählen
- Java Interfaces verstehen: Definitionen, Verwendung und Best Practices
- Java 9 Private Interface Methods: Bessere Kapselung & Code-Wiederverwendung
- Java 8 Optional meistern: Praktischer Leitfaden für null-sicheren Code