美文网首页
[并发编程]快速解读AQS实现

[并发编程]快速解读AQS实现

作者: 6cc89d7ec09f | 来源:发表于2018-11-24 14:40 被阅读15次

前言

如果说Lock是用户和锁的交互接口,那么AQS就是锁的实现。它将所有竞争锁的线程排队,内部维护了同步状态管理、线程的排队、等待与唤醒等。
利用AQS的模板方法我们可以很方便地实现自己的锁

AQS中特别重要的2个属性

1 state : 代表当前锁是否被占用。0代表未占用,1代表被占用(则其他线程将无法获得锁)
2 exclusiveOwnerThread:只有再state显示被占用的情况下,此值则表示占用当前锁的线程。

获得锁的过程(lock())

获得锁的实质就是改变上面2个状态。
1 先判断state是否被占用,如果没有被占用,则CAS操作,将state改成1,并将exclusiveOwnerThread指向当前线程。
2 在多线程竞争的情况下,只有1个线程能获得锁,其他获得锁失败的线程,将被包装成节点,加到同步队列的最末尾。加到同步队列之后,线程将开始不停自旋。


image.png

3 自旋过程中,主要做2件事。1判断当前节点的前继节点是否是头节点。头节点就代表了该节点内部的线程是占据锁的线程。那么头节点线程执行完毕后是会唤醒后继线程的。所以失败的线程进入自旋后会首先检测头节点是否为头节点,如果是,则当前节点就有则个


image.png

相关文章

网友评论

      本文标题:[并发编程]快速解读AQS实现

      本文链接:https://www.haomeiwen.com/subject/qwxyqqtx.html