Heim  >  Artikel  >  Java  >  Gleichzeitige Container in Java

Gleichzeitige Container in Java

王林
王林Original
2023-06-08 09:54:271246Durchsuche

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.

  1. ConcurrentHashMap

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:

  1. ConcurrentHashMap-Instanz erstellen:
ConcurrentMap<Integer, String> map = new ConcurrentHashMap<>();
  1. Elemente hinzufügen:
map.put(1, "one");
  1. Elemente abrufen:
String value = map.get(1);
  1. CopyOn WriteArrayList

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:

  1. Erstellen Sie eine CopyOnWriteArrayList-Instanz:
List<String> list = new CopyOnWriteArrayList<>();
  1. Elemente hinzufügen:
list.add("one");
  1. Elemente abrufen:
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.

  1. ConcurrentLinkedQueue

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:

  1. Erstellen Sie eine ConcurrentLinkedQueue-Instanz:
Queue<String> queue = new ConcurrentLinkedQueue<>();
  1. Enqueue-Vorgang:
queue.offer("one");
  1. Dequeue-Vorgang:
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.

  1. ConcurrentSkipListMap

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:

  1. Erstellen Sie eine ConcurrentSkipListMap-Instanz:
ConcurrentNavigableMap<Integer, String> map = new ConcurrentSkipListMap<>();
  1. Elemente hinzufügen:
map.put(1, "one");
  1. Elemente abrufen:
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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn