AQS

f1f193e6c33268372d66db8cad0db000.png

若有收获,请记得分享和转发哦

深入浅出AbstractQueuedSynchronizer

在Java多线程编程中,重入锁(ReentrantLock) 和信号量(Semaphore)是两个极其重要的并发控制工具。相信大部分读者都应该比较熟悉它们的使用(如果不清楚的小伙伴,赶快拿出书本翻阅一下)。

但是不知道大家是不是有了解过重入锁和信号量的实现细节? 我就带大家看一看它们的具体实现。

首先,先上一张重要的类图,来说明一下三者之间的关系:

4954d75427c94e32d63534764ba80c6e.png

可以看到, 重入锁和信号量都在自己内部,实现了一个AbstractQueuedSynchronizer的子类,子类的名字都是Sync。而这个Sync类,也正是重入锁和信号量的核心实现。子类Sync中的代码也比较少,其核心算法都由AbstractQueuedSynchronizer提供。因此,可以说,只要大家了解了AbstractQueuedSynchronizer,就清楚得知道重入锁和信号量的实现原理了。

03f8124c56458193270ae28d6e868b6a.png

e13e510a4669f98d72c26d4b1faa355c.png

6048d5186128c041003b15e9ec914761.png

527db88fc3e2b80971b277843934a7b8.png

8dfda61532b6b0fb8ef543ffe7a87e25.png

下面的类图展示了代码层面的具体实现:

6ccd0bb37c3db1952484516bd02f91f1.png

4a2aa2c5a7267030b00d0e834fac0f08.png

26641878a0ae6ffb73101c24e0e2f451.png

7b69fb3c28e33e2d82596ae6fd92d2d9.png

02f2b040bfe3df395c0ad06984c3572f.png

6ae2e900a04a0e5ea7f4298dbbae3a02.png

744d26f1cf20679a89fa31e97e71364e.png

041594ae9262dfe997616a19f0ae7760.png

996648db0c1db129c60c2fcde0ae8e00.png

d92d2d087f270116d4d8740cbba72ac9.png

55455487cca12eb9cd3e741be78e2618.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值