首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentHashMap parallelismThreshold

ConcurrentHashMap parallelismThreshold
EN

Stack Overflow用户
提问于 2014-06-30 17:36:35
回答 2查看 4K关注 0票数 10

ConcurrentHashMap有了一些新的方法。关于他们,我有两个问题:

  1. 为什么没有在ConcurrentMap中声明
  2. parallelismThreshold到底意味着什么或做什么?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-30 17:45:10

  1. 这些新方法似乎依赖于特定于ConcurrentHashMap的实现细节,但您必须从Java8作者那里得到答案才能确定。(他们确实浏览过)
  2. 来自ConcurrentHashMap的Javadoc: 这些大容量操作接受parallelismThreshold参数。如果当前地图大小估计小于给定阈值,则按顺序进行。使用Long.MAX_VALUE值可以抑制所有并行性。使用1的值导致最大并行性,将其划分为足够的子任务,以充分利用用于所有并行计算的ForkJoinPool.commonPool()。通常,您首先会选择这些极值之一,然后度量使用介于开销和吞吐量之间的值的性能。
票数 11
EN

Stack Overflow用户

发布于 2014-06-30 17:45:31

parallelismThreshold确定批量操作是按顺序执行还是并行执行。并行运行有一定的开销,因此只有在某些映射大小阈值以上才会有用。

ConcurrentHashMaps支持一组顺序和并行的大容量操作,与大多数Stream方法不同,这些操作的设计是安全的,而且常常是明智的,即使使用由其他线程并发更新的映射也是如此;例如,在计算共享注册表中值的快照摘要时。有三种操作,每一种都有四种形式,接受带有键、值、条目和(键、值)参数和/或返回值的函数。由于ConcurrentHashMap的元素不是以任何特定的方式排序的,并且可以在不同的并行执行中以不同的顺序处理,所以提供的函数的正确性不应该依赖于任何排序,或者依赖于在计算过程中可能瞬间改变的任何其他对象或值;而且,除了forEach操作之外,理想的情况下应该是无副作用的。对Map.Entry对象的大容量操作不支持setValue.方法。

  • forEach:对每个元素执行给定的操作。变体表单在执行操作之前对每个元素应用给定的转换。搜索:返回对每个元素应用给定函数的第一个可用的非空结果;在找到结果时跳过进一步的搜索。-减少:积累每一个要素。所提供的约简函数不能依赖于排序(更正式地说,它应该是结合的和交换的)。有五种变体:-平原削减。(对于(key,value)函数参数,没有这种方法的形式,因为没有对应的返回类型。)-映射的约简积累了应用于每个元素的给定函数的结果。-使用给定的基值,将标量减少到双倍、长和整数。 这些大容量操作接受parallelismThreshold参数。如果当前地图大小估计小于给定阈值,则按顺序进行。使用Long.MAX_VALUE值可以抑制所有并行性。使用1的值导致最大并行性,将其划分为足够的子任务,以充分利用用于所有并行计算的ForkJoinPool.commonPool()。通常,您首先会选择这些极值之一,然后度量使用介于开销和吞吐量之间的值的性能。

(来源)

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

https://stackoverflow.com/questions/24495774

复制
相关文章

相似问题

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