首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ConcurrentHashMAP中,为什么HashEntry最初是在Java7中引入的,为什么在JDK8中被删除?

在ConcurrentHashMAP中,为什么HashEntry最初是在Java7中引入的,为什么在JDK8中被删除?
EN

Stack Overflow用户
提问于 2018-06-26 17:40:52
回答 1查看 101关注 0票数 0

我试图理解ConcurrentHashMAP ( CHM )的实现,但它看起来在Java7和CHM的Jav8实现中有很大的不同,

1)我试图从第一个问题开始理解,为什么HashEntry最初是在Java7中引入的,为什么在JDK8中删除了它?

2)在CHM中定义表大小的因素是什么,是并发级别还是容量?

代码语言:javascript
复制
/**
 * Stripped-down version of helper class used in previous version,
 * declared for the sake of serialization compatibility
 */
static class Segment<K,V> extends ReentrantLock implements Serializable {
    private static final long serialVersionUID = 2249069246763182397L;
    final float loadFactor;
    Segment(float lf) { this.loadFactor = lf; }
}

3)并发级是否在扮演两个角色?

一个是调整表的大小,然后决定并发线程的数量谁可以更新他的映射?在CHM的内部实现中,concurrencylevel的作用是什么?例如,如何使用这个变量值限制线程的数量?实现的哪个部分规定了这一点?

EN

回答 1

Stack Overflow用户

发布于 2018-06-26 19:35:05

看起来你对ConcurrentHashMap及其引入背后的意图并没有完全的理解。引入它是为了以最小的锁定完成并发的读写操作。使用ConcurrentHashMap,可以同时锁定地图的不同部分。在Java8中,他们让ConcurrentHashMap变得更加无锁。

并发级别在决定ConcurrentHashMap的各种属性值时起着重要作用。

1)我试图从第一个问题开始理解,为什么HashEntry最初是在Java7中引入的,为什么在JDK8中删除了它?

答案-你确定它已经被删除了吗?它可能仍然在那里的片段下。请参阅以下内容-

ConcurrentHashMap

2)在CHM中定义表大小的因素是什么,是并发级别还是容量?

答案-并发级别决定一切。默认并发级别为16或32。你也可以通过编程来设置它。

3)并发级是否在扮演两个角色?一个是调整表的大小,然后决定并发线程的数量谁可以更新他的映射?

答案是-是的。它提供了调整大小的提示。一般情况下,段和并发线程的数量会被限制到这个数量。

在CHM的内部实现中,concurrencylevel的作用是什么?例如,如何使用这个变量值限制线程的数量?实现的哪个部分规定了这一点?

您可以查看oracle文档。

CocurrentHashMap

作为进一步的参考-

Java 8 ConcurrentHashMap

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51039675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档