Ana*_*and 12 java concurrenthashmap
我已经在某处读过ConcurrentHashMap
,整个地图对象没有被锁定,而是在Map的一部分上进行锁定.
有人可以详细说明何时锁定进入图片?
是否正确读取Map时没有涉及到锁定,但在更新时只使用锁定?
Tim*_*der 15
是的,ConcurrentHashMap
使用多个锁(默认情况下,其中16个),每个锁控制一个哈希段.
在特定段中设置数据时,将获取该段的锁定.
获取数据时,使用易失性读取.如果易失性读取导致未命中,则获得该段的锁定以用于成功读取的最后一次尝试.
锁定尽可能地最小化,同时仍然是线程安全的.
为了解释"部分地图被锁定",这意味着在更新时,仅锁定地图的"1/concurrencyLevel"(基于密钥的散列).这意味着如果两个更新各自影响单独的"存储桶",则它们仍然可以同时安全地执行,从而最大限度地减少锁争用并最大限度地提高性能.
更重要的是,相信JDK实现 - 您不必担心JDK中的实现细节(一方面,它可能会在发行版之间发生变化).相反,只专注于写你的代码.
归档时间: |
|
查看次数: |
13660 次 |
最近记录: |