¿Por qué netty tener su propio ConcurrentHashMap?
Pregunta
Me di cuenta de que Netty tiene algunos interno Concurrente HashMap utilidades.Me pregunto por qué Netty no utilizar el ConcurrentHashMap que se construye en el Java Core.Es el Netty aplicación mejor de alguna manera, o tiene alguna funcionalidad?Estoy trabajando en un proyecto que necesita de un Concurrente HashMap y me estoy debatiendo si debo utilizar el netty aplicación, pero no puedo ver ninguna diferencia en el código fuente.
Solución
ConcurrentHashMap
no existía hasta JSR-166, que fue lanzado en Java 5 como el java.util.concurrent
paquete.
Netty no incluye el suyo ConcurrentHashMap
Debido a que es superior, de hecho, ciertamente es solo una copia de JSR -166, es para que puedan funcionar con Java 1.4.
Para sus propios proyectos, debe usar java.util.concurrent.ConcurrentHashMap
Si puede depender de Java 5. Y si no puede, entonces debe incluirlo en su producto (y cambiar el nombre del paquete para que no entre en conflicto con los proyectos incluidos en el tiempo de ejecución de Java 5). En cualquier momento. Puede que Doug Lea o Brian Goetz escriban su código seguro para usted, probablemente debería hacerlo.
Otros consejos
Netty del ConcurrentHashMap es en realidad buggy;no es seguro para subprocesos.
He encontrado últimamente.Usted puede demostrar que con una simple prueba.
Hemos tenido:thread1 bucles sobre el mapa.los valores de().(flujo).ordenada().findFirst() thread2 concurrenly poner/quitar del mapa.
Por el diseño de cualquier forma de iteración no debe necesariamente reflejar el mapa, pero nunca debe fallar con ArrayIndexOutOfBoundsException en algunos profundo y oscuro de código, a menos que el netty versión corrupta de los datos del mapa, mientras que el jdk flujos de cosas confía en él.