Frage

Ich bemerkte, dass Netty hat einige interne Gleichzeitige HashMap utilities.Ich bin neugierig, warum Netty nicht die ConcurrentHashMap, dass ist gebaut in die Java-Kern.Ist die Netty Umsetzung besser in irgendeiner Weise, oder gibt es einige neue Funktionen?Ich bin an einem Projekt arbeiten, muss eine Gleichzeitige HashMap und ich bin mir darüber zu debattieren, ob ich verwenden soll, die netty-Implementierung, aber ich kann nicht sehen keinen Unterschied in den source-code.

War es hilfreich?

Lösung

ConcurrentHashMap existierte nicht bis JSR-166, das in Java 5 als die veröffentlicht wurde java.util.concurrent Paket.

Netty enthält nicht ihre eigenen ConcurrentHashMap Weil es überlegen ist - in der Tat ist es sicherlich nur eine Kopie von JSR -166 - es ist so, dass sie auf Java 1.4 laufen können.

Für Ihre eigenen Projekte sollten Sie einfach verwenden java.util.concurrent.ConcurrentHashMap Wenn Sie von Java 5 abhängig sind und wenn Sie dies nicht können, sollten Sie es einfach in Ihr Produkt aufnehmen (und den Paketnamen ändern, damit er nicht mit den enthaltenen Projekten der Java 5 -Laufzeit in Konflikt steht. Sie können Doug Lea oder Brian Goetz dazu bringen, Ihren Thread-Safe-Code für Sie zu schreiben.

Andere Tipps

Netty ' s ConcurrentHashMap ist tatsächlich fehlerhaft;es ist nicht threadsicher.

Ich fand, dass vor kurzem.Sie beweisen können, dass es durch einen einfachen test.

Wir hatten:thread1 Schleifen mehr anzeigen.Werte().stream().sorted().findFirst() Thread2 verzahnt concurrenly setzen/entfernen die Karte.

By design jede form der iteration, sollten Sie nicht unbedingt die Karte, aber es sollte nie Versagen, mit ArrayIndexOutOfBoundsException in einigen tief-und dunkel-code, es sei denn, der netty-version versaut der Karte von Daten, während die jdk-streams Sachen verlässt sich auf Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top