java clh_Java小白系列(十):CLH

一、前言

本篇内容是为之后的内容AQS打下基础,AQS又称 Abstract Queued Synchronizer ,即抽象队列同步器,Java中,基于 AQS 实现了很多著名的锁,如:重入锁(ReentrantLock)、读写锁(ReadWriteLock)、共享锁(CountDownLatch)若设置为1则等同于互斥锁,等。因此,为了深入分析AQS,我将重要的内容都拆解出来,从一个一个的知识点逐个击破。

二、CLH

CLH(Craig,Landin and Hagersten)是三个人,共同发明了一个可扩展、高性能、公平且基于自旋锁的链表;链表中的每个线程只在本地自旋前一个节点的状态,即该节点(线程)不断自旋获取前一个节点的状态;每个节点都有一个状态(要么自旋,要么释放锁)。

在AQS中,用到的数据结构是 CLH 的变体:

+-------+ prev +-------+ +-------+

head | A |

+-------+ +-------+ +-------+

上图是AQS中CLH的变体结构,该结构是:

一个 FIFO(first-in-first-out)队列;

新的等待获取锁的线程先加入队尾(tail);

如果队列是空,则第一个新加入的节点立即获得锁;

新加入的线程本地自旋前一个节点的状态(如 C 不断自旋获取 B 的状态);

(当A释放锁时,B成为第一个节点),头节点并不能保证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值