繁体   English   中英

将concurrencyLevel为1的ConcurrentHashMap用作HashMap吗

[英]Will ConcurrentHashMap with concurrencyLevel as 1 work as HashMap

我创建了一个具有以下值的`ConcurrentHashMap:

ConcurrentHashMap<String,String> concurrentHashMap = new ConcurrentHashMap<>(10,.9F,1);

以上表示只有1个线程可以在给定的时间点更新地图。 如果是这种情况,那么我可以说它在并发的情况下将像HashMap一样工作。 在给定的时间点仅执行一次写操作。

我的理解正确吗,或者我在这里缺少什么?

concurrencyLevel只是一个提示,有助于调整内部数据结构的大小。 不能保证将使用的实际值是1 ,并且如果不是从多个线程中实际使用它,则不是表现为常规的HashMap,这可能意味着效率较低。

从Javadoc:

使用比您需要的高得多的值会浪费空间和时间,而低得多的值会导致线程争用。

您的问题实际上是关于concurrencyLevel

concurrencyLevel-并发更新线程的估计数量。 该实现可以使用该值作为调整提示。

基本上, ConcurrentHashMap被分块为段。 每个段一次只能被一个线程修改。 简而言之,您拥有的细分越多,您获得的并发性就越高。 但是,由于每个段都有其自己的内存开销,因此最终还会使用更多的内存。

因此,如果您知道只有一个线程将访问您的映射,则将concurrencyLevel设置为1只会在映射中创建1个段,从而使其内存使用效率更高。

如果该值太大,将使用更多的内存,并且将花费一些时间为要在映射中读取/写入的每个对象找到正确的段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM