Java并发中的锁条带是什么?
锁条带是锁定发生在几个容器或条带或桶上的地方,这意味着到达桶只是螺栓,而不是整个信息结构。这就是锁条带的想法。对信息结构的一部分拥有单独的锁,其中每个锁都锁定在自治项目的可变测量排列上。我们以ConcurrentHashMap为例。
例子:
当然, Java中的 ConcurrentHashMap 有 16 个桶,每个容器都有自己的锁系统。因此,到达离散桶中键的字符串可以同时到达它们。如果您需要想象一下,那么下面的图片会让您想到如何为 ConcurrentHashMap 锁定条带化。
这里有两个字符串需要到达罐 0 中的键,以便其中一个可以进入,同样,两个字符串需要到达盆 1 中的键,以便其中一个可以进入。与桶 n-3 相同。沿着这些思路,通过从 6 个字符串中分离出锁定条带,3 个字符串可以削弱信息结构。
为了发现新组件的存储桶,我们依赖于密钥的哈希码。为了包含更多的桶,我们应该复制当前的哈希表并制作另一个表,状态和大小加倍。
锁条带的特点:
- 它仅发生在某些存储桶/容器上。
- 它有助于将两个或更多元素添加到不同的容器中。
锁条带在Java并发中的作用:
- 它在处理并发访问数据的同时具有良好的性能。
- 它有助于线程访问单独的存储桶/容器中的密钥。
Java并发缺点:
在Java Concurrency 中的 Lock Striping 应用锁的情况下,如果您需要一个集合进行独占访问而不是单个锁,那么它会更加困难和昂贵。