并发编程-AQS篇(更新中ing)
小于 1 分钟
面试简述:
总的来说,我所理解的AQS,核心关键就是 一个表示同步状态的 int state 变量+cas 机制设置state状态+FIFO等待队列(双向链表)。
具体来说:
AQS的锁类型分为独占锁,共享锁。
以Reentantlocak为例讲解:
ReentrantLock非公平锁的加锁流程:
1.尝试着使用CAS操作将锁的状态state由0修改为1,修改成功则线程获得锁。
2.不成功就会再次尝试去抢锁,以及判断这个线程是否是当前持有锁的线程(如果是只需要将state+1,代表锁重入)。
3.抢锁没成功,也不是持有锁的线程,那么就会添加到等待队列然后调用LockSupport.park()方法进行阻塞等待,然后被唤醒。
模板方法设计模式:使用者继承AbstractQueuedSynchronizer并重写指定的方法
详解:把整个流程以流程图画下来了,建议参考学习(不清晰工号后台回复【AQS】)