AQS

…衆ロ難τιáo~ 提交于 2020-08-13 13:29:03

1.是什么?

AQS是构建锁和同步器的框架,主要支持获取锁和释放锁,像ReentraintLock的底层就是基于AQS实现的。获取锁时如果是独占锁就会堵塞,阻塞了就会将该线程加入阻塞队列中等待,直到成功获得锁从队列中移除。释放锁时需要修改并唤醒其他被阻塞的线程。

2.原理

1.核心组成:加锁状态state,加锁线程exclusiveOwnerThread,和阻塞队列。

阻塞队列是采用CLH模型构成的先进先出的双向队列。(CLH指虚拟的双向队列,队列只存储节点之间的关联关系,不存储节点实例)

2.获取锁的过程:

线程首先CAS尝试改变state状态,如果成功由0变为1表示获取成功,将exclusiveOwnerThread设为当前线程名。
如果是可重入锁,那么可以再去获得这把锁,state会累加。
另一个线程也CAS改变state,失败了就去阻塞队列里。

3.释放锁:

将state递减直至为0则释放成功,将exclusiveOwnerThread设为null同时唤醒队列中的线程。

3.其他应用

可重入锁:Reentrantlock、ReentrantReadWriteLock
不可重入锁:Mutrx
同步器:Semaphore/countDownlatch/CyclicBarrier.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!