深入理解AQS
2023-07-03 11:59:44 5 举报
AQS的原理解析
作者其他创作
大纲/内容
AQS:是一个用来实现依赖状态的同步器
reentrantLock,countDownLatch等都是通过一个内部类Sync集成AQS,将同步器所有调用都映射到Sync对应的方法
AQS特性:
阻塞等待队列
同步等待队列:存放获取锁失败时入队的线程
CLH队列:是一个基于双向链表数据结构的队列,是FIFO先进先出线程等待队列
条件等待队列:调用await()的时候会释放锁,线程进入条件队列,调用signal()唤醒线程时会把条件队列的线程放到同步等待队列中,等待再次获取锁
使用单向列表保存,用nextWaiter来连接:
调用await方法阻塞线程
当前线程存在同步队列的头节点,调用await方法进行阻塞(从同步队列转为条件队列)
共享/独占:tryAcquire()实现独占方式,成功获取锁返回true,失败返回false,tryAcquireShared()实现共享方式,返回负数表示获取锁失败,0表示成功,但是没有剩余资源,正数表示成功,且有剩余资源
公平/非公平:默认非公平,可以在构造方法中传true,创建公平锁
公平:加锁时直接进入队列
非公平:先去cas尝试获取锁,有一定的几率插入成功
可重复:获取锁时会绑定当前线程,重入锁时判断线程是否相等,相等则维护state的值,可以通过state的值判断锁重入的次数
允许中断:
0 条评论
下一页