<meta charset="utf-8">
AbstractQueuedSynchronizer——AQS 抽象排队同步器
AQS实现:
1.使用Node实现FIFO队列
2.利用了一个Int类型表示状态 state
3.使用继承来实现
子类通过继承并通过实现它的方法管理其状态{acquire 和 release}的方法操作状态
可以同时实现排他锁和共享锁模式(独占,共享)
AQS功能分为独占控制功能和共享控制功能,所有子类要么实现和使用独占API,要么使用和实现共享锁的API,不会同时使用。
AQS实现大致思路:
AQS内部实现一个CLH队列来管理锁,线程首先尝试获取锁,失败,将当前线程以及等待状态等信息包成一个Node节点,加入到同步队列(sync queue)中,接着不断循环尝试获取锁,条件是:当前节点为head的节点直接后继才会尝试,如果失败就阻塞自己,直到被唤醒,当持有锁的线程释放锁时,会唤醒队列中的后继线程。
AQS同步组件:
CountDownLatch
Semaphore
CyclicBarrier
ReentrantLock
Condition
FutureTask
CountDownLatch 计数器,阻塞线程,保证子线程执行完成后再执行主线程(一定时间内,执行子线程数量内)
其他的阻塞线程方法:https://blog.csdn.net/wk1134314305/article/details/74094406
Semaphore 信号量,控制并发访问的线程个数,控制资源有限访问数