我注意到Netty具有一些内部并发哈希图实用程序。我很好奇为什么Netty不使用Java Core内置的ConturrentHashMap。 Netty的实现在某种程度上是更好的,还是具有一些新功能?我正在研究一个需要并发hashmap的项目,并且在辩论是否应该使用Netty实施,但是我看不到源代码的任何区别。

有帮助吗?

解决方案

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实际上是越野车。它不是螺纹安全。

我最近发现。您可以通过简单的测试来证明这一点。

我们有:thread1循环map.values()。stream()。sorted()。findfirst()thread2 contrenly put/从地图上删除。

通过设计,任何形式的迭代都不应反映出地图,但是除非Netty版本弄乱了地图数据,否则它在某些深层而晦涩的代码中以ArrayindexoutofBoundSexception的影响永远不会失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top