Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ConcurrentHashMap与ConcurrentyLevel为1时是否可以用作HashMap_Java - Fatal编程技术网

Java ConcurrentHashMap与ConcurrentyLevel为1时是否可以用作HashMap

Java ConcurrentHashMap与ConcurrentyLevel为1时是否可以用作HashMap,java,Java,我创建了一个带有以下值的“ConcurrentHashMap”: ConcurrentHashMap<String,String> concurrentHashMap = new ConcurrentHashMap<>(10,.9F,1); ConcurrentHashMap ConcurrentHashMap=新的ConcurrentHashMap(10.9F,1); 上面的意思是只有一个线程可以在给定的时间点更新映射。如果是这种情况,那么我可以说在并发的情况下它将

我创建了一个带有以下值的“ConcurrentHashMap”:

ConcurrentHashMap<String,String> concurrentHashMap = new ConcurrentHashMap<>(10,.9F,1);
ConcurrentHashMap ConcurrentHashMap=新的ConcurrentHashMap(10.9F,1);
上面的意思是只有一个线程可以在给定的时间点更新映射。如果是这种情况,那么我可以说在并发的情况下它将像
HashMap
一样工作。;在给定的时间点只执行一次写入操作


我的理解是正确的还是遗漏了什么?

并发级别只是一个提示,可以帮助调整内部数据结构的大小。无法保证
1
将是实际使用的值,如果您实际从多个线程使用它,它可能意味着它的使用效率较低,而不是作为常规HashMap

从Javadoc:

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


concurrencyLevel
只是一个提示,用于帮助调整内部数据结构的大小。无法保证
1
将是实际使用的值,如果您实际从多个线程使用它,它可能意味着它的使用效率较低,而不是作为常规HashMap

从Javadoc:

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


concurrencyLevel
只是一个提示,用于帮助调整内部数据结构的大小。无法保证
1
将是实际使用的值,如果您实际从多个线程使用它,它可能意味着它的使用效率较低,而不是作为常规HashMap

从Javadoc:

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


concurrencyLevel
只是一个提示,用于帮助调整内部数据结构的大小。无法保证
1
将是实际使用的值,如果您实际从多个线程使用它,它可能意味着它的使用效率较低,而不是作为常规HashMap

从Javadoc:

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


你的问题实际上是关于:

concurrencyLevel—估计的并发更新线程数。实现可以使用此值作为调整大小的提示

基本上,
ConcurrentHashMap
是分块的。每个段一次只能由一个线程修改。简单地说,您拥有的段越多,并发性就越强。然而,由于每个段都有自己的内存开销,因此最终也会使用更多的内存

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


如果该值太高,将使用更多内存,并将花费一些时间为您要在地图中读/写的每个对象查找正确的段。

您的问题实际上是关于:

concurrencyLevel—估计的并发更新线程数。实现可以使用此值作为调整大小的提示

基本上,
ConcurrentHashMap
是分块的。每个段一次只能由一个线程修改。简单地说,您拥有的段越多,并发性就越强。然而,由于每个段都有自己的内存开销,因此最终也会使用更多的内存

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


如果该值太高,将使用更多内存,并将花费一些时间为您要在地图中读/写的每个对象查找正确的段。

您的问题实际上是关于:

concurrencyLevel—估计的并发更新线程数。实现可以使用此值作为调整大小的提示

基本上,
ConcurrentHashMap
是分块的。每个段一次只能由一个线程修改。简单地说,您拥有的段越多,并发性就越强。然而,由于每个段都有自己的内存开销,因此最终也会使用更多的内存

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


如果该值太高,将使用更多内存,并将花费一些时间为您要在地图中读/写的每个对象查找正确的段。

您的问题实际上是关于:

concurrencyLevel—估计的并发更新线程数。实现可以使用此值作为调整大小的提示

基本上,
ConcurrentHashMap
是分块的。每个段一次只能由一个线程修改。简单地说,您拥有的段越多,并发性就越强。然而,由于每个段都有自己的内存开销,因此最终也会使用更多的内存

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

如果该值太高,将使用更多内存,并将花费一些时间为要在地图中读取/写入的每个对象查找正确的段