質問

Nettyには、内部の同時ハッシュユーティリティがいくつかあることに気付きました。 NettyがJava Coreに組み込まれているConcurrenthashmapを使用しない理由に興味があります。ネットティーの実装は何らかの方法で優れていますか、それとも新しい機能がありますか?私は同時のハッシュマップが必要なプロジェクトに取り組んでおり、ネットの実装を使用する必要があるかどうかを議論していますが、ソースコードに違いはわかりません。

役に立ちましたか?

解決

ConcurrentHashMap まで存在しませんでした JSR-166, 、これはJava 5でリリースされました java.util.concurrent パッケージ。

Nettyは独自のものを含めません ConcurrentHashMap それは優れているからです - 実際、それは確かにJSR -166の単なるコピーです - それは彼らがJava 1.4で実行できるようにです。

あなた自身のプロジェクトのために、あなたはただ使用する必要があります java.util.concurrent.ConcurrentHashMap Java 5に依存できる場合は、できない場合は、製品に含めるだけです(Java 5ランタイムの含まれたプロジェクトと競合しないようにパッケージ名を変更してください) Doug LeaまたはBrian Goetzにスレッドセーフコードを書くことができます。おそらくそうすべきです。

他のヒント

NettyのConcurrenthashmapは実際にはバグです。スレッドセーフではありません。

最近それを見つけました。簡単なテストで証明できます。

map.values()。stream()。sorted()。findfirst()thread2はマップからconcurrenly put/remotedを介してループしました。

あらゆる形式の反復が必ずしもマップを反映するとは限りませんが、JDKストリーミングが依存している間にネット版がマップデータを台無しにしない限り、いくつかの深い曖昧なコードでArrayindexOutofboundsexceptionで失敗することはありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top