ConcurrentHashMap锁定

Ana*_*and 12 java concurrenthashmap

我已经在某处读过ConcurrentHashMap,整个地图对象没有被锁定,而是在Map的一部分上进行锁定.

有人可以详细说明何时锁定进入图片?

是否正确读取Map时没有涉及到锁定,但在更新时只使用锁定?

Tim*_*der 15

是的,ConcurrentHashMap使用多个锁(默认情况下,其中16个),每个锁控制一个哈希段.

在特定段中设置数据时,将获取该段的锁定.

获取数据时,使用易失性读取.如果易失性读取导致未命中,则获得该段的锁定以用于成功读取的最后一次尝试.

  • 只是为了明确构造函数的完成是指桶的输入. (2认同)

Boh*_*ian 6

锁定尽可能地最小化,同时仍然是线程安全的.

为了解释"部分地图被锁定",这意味着在更新时,仅锁定地图的"1/concurrencyLevel"(基于密钥的散列).这意味着如果两个更新各自影响单独的"存储桶",则它们仍然可以同时安全地执行,从而最大限度地减少锁争用并最大限度地提高性能.

更重要的是,相信JDK实现 - 您不必担心JDK中的实现细节(一方面,它可能会在发行版之间发生变化).相反,只专注于写你的代码.