Question

J'ai remarqué que Netty a quelques utilitaires HashMap simultanées internes. Je suis curieux de savoir pourquoi Netty n'utilise pas le ConcurrentHashMap qui est intégré dans le Java de base. Est-ce la mise en œuvre Netty mieux d'une certaine manière, ou at-il de nouvelles fonctionnalités? Je travaille sur un projet qui a besoin d'un Concurrent HashMap et je me débats si je dois utiliser la mise en œuvre Netty, mais je ne vois aucune différence dans le code source.

Était-ce utile?

La solution

ConcurrentHashMap n'existait pas jusqu'à ce que JSR-166 , qui a été publié en Java 5 que le paquet java.util.concurrent.

Netty ne comprend pas leur propre ConcurrentHashMap parce qu'elle est supérieure - en fait, il est certainement juste une copie de la JSR-166 - il est pour qu'ils puissent fonctionner sur Java 1.4.

Pour vos projets, vous devez simplement utiliser java.util.concurrent.ConcurrentHashMap si vous pouvez prendre une dépendance à Java 5. Et si vous ne pouvez pas, alors vous devriez simplement l'inclure dans votre produit (et changer le nom du package afin qu'il n » t conflit avec les projets inclus de l'environnement d'exécution Java 5.) Chaque fois que vous pouvez obtenir Doug Lea ou Brian Goetz écrire votre code thread-safe pour vous, vous devriez probablement.

Autres conseils

ConcurrentHashMap Netty est en fait bogué; il est threadsafe.

Je trouve que récemment. Vous pouvez le prouver par un simple test.

Nous avions: thread1 boucle sur map.values ??() courant (). trié ().. findFirst () thread2 concurrenly mettre / retirer de la carte.

De par sa conception toute forme d'itération ne doit pas nécessairement refléter la carte, mais il ne doit jamais échouer avec ArrayIndexOutOfBoundsException dans un code profond et obscur à moins que la version Netty foiré les données cartographiques tandis que les jdk flux des choses repose sur elle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top