Java synchronisiert Sammlungen Auswahl für Anwendungsanforderung - Java

Was ist synchronisierte Sammlung bedeutet in Java. Welche für die Entwicklung der Anwendung zu wählen, wenn ich Datensätze des Benutzers in JSP-Seite aus Servlet drucke, die unter den folgenden auswählen

  1. HashMap
  2. Hash-tabelle

Antworten:

1 für die Antwort № 1

Die Synchronisierung ist die Möglichkeit, den Zugriff mehrerer Threads auf eine gemeinsam genutzte Ressource zu steuern.

Die synchronisierten Auflistungsklassen Hash-tabelle und Vektor, und statisch Methoden der java.util.Collections Klasse synchronizedCollection(),synchronizedSet(), synchronizedSortedMap(),synchronizedSortedSet() stellen Sie eine grundlegende bedingt thread-sichere Implementierung von Map, List und Set zur Verfügung.

Als die Javadocs sagt - Wenn eine Thread-sichere Implementierung nicht istbenötigt wird, wird empfohlen HashMap anstelle von Hashtable zu verwenden. Wenn eine threadsichere, hochgradig gleichzeitige Implementierung gewünscht wird, wird empfohlen, anstelle von Hashtable ConcurrentHashMap zu verwenden.

Unterschied zwischen Hashtable und ConcurrentHashMap : ConcurrentHashMap sperrte nur bestimmte Teile von Map, während Hashtable während der Iteration die gesamte Map sperrte

ConcurrentHashMap ist auf Gleichzeitigkeit ausgelegt und verbessert die Performance währenddessen HashMap die von Natur aus nicht synchronisiert ist, kann durch Anwenden eines Wrappers mit synchronisiert werden Collections.synchronizedMap().

Unterschied: ConcurrentHashMap Währenddessen keine Nullschlüssel oder Nullwerte zulassen HashMap erlaubt Null-Schlüssel.


0 für die Antwort № 2

Eine synchronisierte Auflistung ist eine Threadsafe für gleichzeitige Updates von mehreren Threads. Im Allgemeinen in Java:

  • Verwenden Sie Hashtable niemals. Verwenden Sie stattdessen ConcurrentHashMap. Obwohl Hashtable Thread-sicher ist, hat ConcurrentHashMap eine bessere Leistung und bietet dieselben Garantien für den gemeinsamen Zugriff.
  • Favor HashMap, wenn Sie keine Parallelität benötigen (d. H. Die Map wird nur von einem Thread verwendet)

Was die JSP-Frage angeht, kommt es wirklich darauf an.Wenn Sie dieselbe Map-Instanz über mehrere Threads hinweg teilen (z. B. wenn es in der Anwendung "global" ist), verwenden Sie ConcurrentHashMap. Wenn Sie es in einer Anfrage erstellen, dann entfernen Sie es, wenn Sie fertig sind, und es wird nie in einem anderen Thread verwendet, dann verwenden Sie einfach HashMap.

Es gibt einige weitere Details in Dies Frage auch.


Speisekarte