多线程之AQS

多线程之AQS

AQS

AQS - AbstractQueuedSynchronizer, 抽象队列同步器

ReentrantLock、ReentrantReadWriteLock底层都是基于AQS来实现的


ReentrantLock与AQS

Screen Shot 2020-08-27 at 10.30.35 PM

线程1加锁,如果没有别的线程占有锁,CAS将state由0 变成1 , 并吧当前加锁线程设置为自己。

preview

重入: 如果当前线程已经占有锁,state+1, release时, state-1,state为0时认为完全释放锁.

线程2尝试加锁,加锁失败,线程2放入AQS的等待队列。

Screen Shot 2020-08-28 at 3.03.10 PM

线程1,释放锁,从等待队列的队头唤醒排队线程,线程2重新尝试加锁。

AQS就是一个并发包的基础组件,用来实现各种锁,各种同步组件的。它包含了state变量、加锁线程、等待队列等并发中的核心组件

summary

Screen Shot 2020-08-28 at 3.05.26 PM

QS作为并发编程的框架,为很多其他同步工具提供了良好的解决方案。

Screen Shot 2020-08-28 at 4.02.38 PM

3.3 自定义同步工具

相关 Post not found: 线程之ReentrantLock 线程之ReentrantLock

https://mp.weixin.qq.com/s/atULuqIqhMcctG6xD3LgSA

https://mp.weixin.qq.com/s?__biz=MzAxMjEwMzQ5MA==&mid=2448889563&idx=2&sn=9f3c58d883a0775072ef9a061d35555b&scene=21#wechat_redirect

https://zhuanlan.zhihu.com/p/54297968

https://mp.weixin.qq.com/s/sA01gxC4EbgypCsQt5pVog