Mit der Popularität von Multi-Core-Prozessoren haben Programmierer begonnen, sich mit dem Problem des gleichzeitigen Zugriffs auf Daten zu befassen. Um das Problem der Thread-Sicherheit zu lösen, bietet Java eine Vielzahl gleichzeitiger Container. In diesem Artikel werden mehrere gängige gleichzeitige Java-Container vorgestellt.
ConcurrentHashMap ist eine threadsichere Hash-Tabelle. Die Implementierung ist im Wesentlichen dieselbe wie bei HashMap, ConcurrentHashMap unterstützt jedoch Änderungsvorgänge mit hoher Parallelität und eignet sich daher besser für Multithread-Szenarien als HashMap.
ConcurrentHashMap enthält mehrere Segmentsperren. Jede Sperre schützt einen Hash-Bucket, sodass mehrere Threads verschiedene Buckets gleichzeitig ändern können. Dieses Design ermöglicht es ConcurrentHashMap, eine effiziente Lese- und Schreibtrennung zu erreichen.
Die Schritte zur Verwendung von ConcurrentHashMap sind wie folgt:
ConcurrentMap<Integer, String> map = new ConcurrentHashMap<>();
map.put(1, "one");
String value = map.get(1);
CopyOnWriteArrayList ist eine Thread-sichere Dynamik Array. Sein Merkmal besteht darin, dass der Schreibvorgang das ursprüngliche Array nicht direkt ändert, sondern ein neues Array zur Änderung erstellt und dann das ursprüngliche Array durch das neue Array ersetzt. Da Änderungsvorgänge und Lesevorgänge nicht in Konflikt geraten, unterstützt CopyOnWriteArrayList viele gleichzeitige Lesevorgänge.
Die Schritte zur Verwendung von CopyOnWriteArrayList sind wie folgt:
List<String> list = new CopyOnWriteArrayList<>();
list.add("one");
String value = list.get(0);
It Es ist zu beachten, dass jede Änderung eine Erstellung erfordert eines neuen Arrays. Der Änderungsvorgang von CopyOnWriteArrayList ist relativ langsam und nicht für hochfrequente Schreibvorgänge geeignet.
ConcurrentLinkedQueue ist eine threadsichere Warteschlange. Seine Implementierung basiert auf verknüpften Listen und unterstützt Enqueue- und Dequeue-Vorgänge mit hoher Parallelität.
ConcurrentLinkedQueue verwendet intern CAS-Operationen, um gleichzeitige Änderungen an der verknüpften Liste zu implementieren und so Leistungsprobleme zu vermeiden, die durch die Verwendung von Sperren verursacht werden.
Die Schritte zur Verwendung von ConcurrentLinkedQueue sind wie folgt:
Queue<String> queue = new ConcurrentLinkedQueue<>();
queue.offer("one");
String value = queue.poll();
It Es ist zu beachten, dass ConcurrentLinkedQueue keinen Direktzugriff unterstützt Daher können Sie nur vom Kopf der Warteschlange aus durchlaufen.
ConcurrentSkipListMap ist eine threadsichere geordnete Zuordnungstabelle. Seine Implementierung basiert auf Skip-Tabellen und kann Einfüge-, Lösch- und Suchvorgänge schnell unterstützen.
Ähnlich wie ConcurrentHashMap ist auch ConcurrentSkipListMap in mehrere Ebenen unterteilt. Jede Ebene verfügt über einen eigenen Satz verknüpfter Listen, wodurch die Effizienz des gleichzeitigen Zugriffs verbessert werden kann.
Die Schritte zur Verwendung von ConcurrentSkipListMap sind wie folgt:
ConcurrentNavigableMap<Integer, String> map = new ConcurrentSkipListMap<>();
map.put(1, "one");
String value = map.get(1);
It Es ist zu beachten, dass die Implementierung von ConcurrentSkipListMap verglichen wird komplex, also in kleinen Daten Bei großen Mengen kann die Leistung schlechter sein als bei TreeMap.
Zusammenfassung
Java bietet eine Vielzahl gleichzeitiger Container, und Programmierer können den geeigneten Container entsprechend ihren Anforderungen auswählen. Es ist zu beachten, dass für verschiedene Container unterschiedliche Anwendungsszenarien gelten und eine unsachgemäße Verwendung zu Leistungsproblemen führen kann. Daher wird empfohlen, den geeigneten Container entsprechend dem Szenario auszuwählen.
Das obige ist der detaillierte Inhalt vonGleichzeitige Container in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!