Für solche Fälle haben Sie
java.util.concurrent.ConcurrentHashMap<K,V>
Details here.
Kurz gesagt, ConcurrentHashMap funktioniert mit getrennten Blöcken, die unabhängig voneinander gesperrt werden, so dass keine anderen Threads darauf zugreifen können, bis die Arbeit erledigt ist (aber auf andere Blöcke zu dieser Zeit zugreifen kann). Die Standardblockgröße ist 16. Mehr dazu here.
Jetzt müssen Sie Kartengrößen verstehen, um über das Auffüllen zu sprechen. Die Standardgröße ist 16. Aber es gibt einen Ladefaktor von 0,75, das heißt, wenn die Karte 75% voll ist, wird die Größe auf das Doppelte der vorherigen Größe geändert, das heißt, neues Array neues Set von Schlüsseln erstellen und dann alles darauf kopieren (Wenn ich neues Set sage, meine ich die gleiche Logik für die Größenänderung). Nun, wenn Sie es schnell füllen, bedeutet, dass eine Menge Kopieren und für größere Größen, dauert es einige Zeit, so ist es besser, ihm eine große Anfangsgröße am Anfang zu geben, wie:
ConcurrentHashMap<String, Object> mp = new ConcurrentHashMapy<>(someLargeSize);
Lassen someLargeSize
sein die Reihenfolge von etwas, das Sie erwarten oder zumindest in der Nähe, so dass Sie die Größe auf ein Minimum reduzieren. Belastungsfaktor nicht berühren, es wird nur die Leistung verringern, 75% ist in Ordnung.
Und btw., Max Größe von HashMap und ConcurrentHashMap (und HashSet und Arraylist oder jede Array basierten Datenstruktur) in Java 1,073,741,824
ist, da die array[]
im Hintergrund ist, DS in Java sind meist Wrapper nur mit spezifischen Funktionen dafür, aber ich bezweifle, dass Sie jemals diese Grenze erreichen werden, denn für Objekte, die einige Strings oder irgendetwas anderes enthält, benötigen Sie eine Menge von GB RAM für sie.
Code hinzufügen Bitte – Sanjeev
Nebenläufigkeit wird nicht dazu führen, mp mit ob-Objekten zu füllen, es sei denn, es gibt einen Code, der das explizit tut. Code wäre hilfreich !!! –
Der Code ist sehr lang, es ruft viele Methoden, die mp und ob als Parameter übergeben, keine Verwendung von Putting hier, während der Methode (und die aufgerufenen Methoden) die gleichen mp und ob sind übergeben und verwendet. . . – GingerHead