ConcurrentHashMap为什么放弃分段锁,分段锁和Node锁的区别

分段锁和节点(Node)锁都是一些常见的锁技术,它们的区别和优缺点如下:

分段锁是将锁空间(Lock Space)划分为多个区域,每个区域独立一把锁,每个锁只保护一部分数据。读写操作只需要锁住对应区域的锁,可以实现读写并行,从而提高并发性能。例如,一个哈希表可以划分为多个桶,每个桶可以使用一把锁独立进行读写操作。分段锁的优点包括:

  1. 并发性高:不同的线程可以同时对不同区域的数据进行读写操作,提高并发性能。
  2. 细粒度控制:可以将锁空间划分为更细小的区域,提高系统的灵活性和可扩展性。
  3. 更少的争用:如果数据分布比较均匀,每个锁锁住的数据区域不会太大,减少了锁的争用。

分段锁的缺点包括:

  1. 空间开销较大:需要为每个锁分配一定的内存空间,如果锁过多,会占用较多的资源。
  2. 管理复杂:需要管理和维护每个锁的状态和状态变化,增加了管理复杂性。

节点锁是指针锁,它在读写数据时只锁定单个节点,常用于无需遍历整个数据结构的操作,如插入、删除等。相对于分段锁,节点锁的优势在于其开销较小,缺点在于其操作局限性较大。节点锁的优点包括:

  1. 开销较小:只需要锁定单个节点,开销较小。
  2. 操作简单:操作起来相对简单。

节点锁的缺点包括:

  1. 并发性差:由于只锁定单个节点,多个线程同时执行锁住相邻的节点,会发生冲突,从而影响并发性能。
  2. 局限性较大:只适用于无需遍历整个数据结构的单个指针操作,适用范围较小。

因此,分段锁适用于锁空间分布比较均匀的场景,有较高的并发性能和更细粒度的控制,但是需要管理复杂,空间开销较大。节点锁则适用于锁空间分布比较不均匀的场景,开销小,操作简单,但是适用范围有限,不适用于遍历整个数据结构的操作。

Java8放弃了Node锁,降低锁的粒度,提高性能,并使用CAS操作来确保Node的一些操作的原子性,取代了锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值