Warum netty eigene ConcurrentHashMap?
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.
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.