Java ConcurrentHashMap与ConcurrentyLevel为1时是否可以用作HashMap
我创建了一个带有以下值的“ConcurrentHashMap”:Java ConcurrentHashMap与ConcurrentyLevel为1时是否可以用作HashMap,java,Java,我创建了一个带有以下值的“ConcurrentHashMap”: ConcurrentHashMap<String,String> concurrentHashMap = new ConcurrentHashMap<>(10,.9F,1); ConcurrentHashMap ConcurrentHashMap=新的ConcurrentHashMap(10.9F,1); 上面的意思是只有一个线程可以在给定的时间点更新映射。如果是这种情况,那么我可以说在并发的情况下它将
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只会在映射中创建一个段,从而提高内存效率
如果该值太高,将使用更多内存,并将花费一些时间为要在地图中读取/写入的每个对象查找正确的段