【问题标题】:How to set concurrency level in concurrentHashMap in javajava - 如何在java中的concurrentHashMap中设置并发级别
【发布时间】:2013-06-30 18:35:08
【问题描述】:

请告诉我如何在 Java 的 ConcurrentHashMap 中设置并发级别?水平设置过高或过低会有什么影响?它在内部是如何工作的?

【问题讨论】:

    标签: java concurrency concurrenthashmap


    【解决方案1】:

    ConcurrentHashMap 构造函数

     public ConcurrentHashMap(int initialCapacity,
                                 float loadFactor, int concurrencyLevel) {
    

    您可以根据自己的需要很好地定义并发级别。 关于你的第二个问题。 这是来自 ConncurrentHashMap (java 1.6) 的 javadoc 注释

     * Ideally, you should choose a value to accommodate as many
     * threads as will ever concurrently modify the table. Using a
     * significantly higher value than you need can waste space and time,
     * and a significantly lower value can lead to thread contention.
    

    因此,理想情况下,如果您不知道地图会变得多大或将访问地图的线程数,最好使用并发的默认值(目前为 16)。

    http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/concurrent/ConcurrentHashMap.java

    希望它的帮助!

    【讨论】:

    • 但是 ConcurrencyLevel 在内部是由 65536(最大并发)限制的
    • 更高的concurrencyLevel值会浪费多少空间?我的意思是如果我保持 initialCapacity 为 16,concurrencyLevel 为 20,负载因子为 0.75f。那么段数组的大小是多少?我错过了一些基本的东西,但还没有弄清楚。
    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 2023-03-28
    • 2011-08-05
    • 1970-01-01
    • 2011-02-19
    • 2017-10-22
    • 2015-04-09
    相关资源
    最近更新 更多