并发编程-AQS篇(更新中ing)

小龙coding小于 1 分钟

面试简述:

总的来说,我所理解的AQS,核心关键就是 一个表示同步状态的 int state 变量+cas 机制设置state状态+FIFO等待队列(双向链表)。

具体来说:

AQS的锁类型分为独占锁,共享锁。

以Reentantlocak为例讲解:

ReentrantLock非公平锁的加锁流程:

1.尝试着使用CAS操作将锁的状态state由0修改为1,修改成功则线程获得锁。

2.不成功就会再次尝试去抢锁,以及判断这个线程是否是当前持有锁的线程(如果是只需要将state+1,代表锁重入)。

3.抢锁没成功,也不是持有锁的线程,那么就会添加到等待队列然后调用LockSupport.park()方法进行阻塞等待,然后被唤醒。

模板方法设计模式:使用者继承AbstractQueuedSynchronizer并重写指定的方法

详解:把整个流程以流程图画下来了,建议参考学习(不清晰工号后台回复【AQS】)

img