第七章

AbstractQueuedSynchronizer——AQS 抽象排队同步器

AQS实现:

1.使用Node实现FIFO队列

2.利用了一个Int类型表示状态 state

3.使用继承来实现

子类通过继承并通过实现它的方法管理其状态{acquire 和 release}的方法操作状态

可以同时实现排他锁和共享锁模式(独占,共享)

AQS功能分为独占控制功能和共享控制功能,所有子类要么实现和使用独占API,要么使用和实现共享锁的API,不会同时使用。

AQS实现大致思路:

AQS内部实现一个CLH队列来管理锁,线程首先尝试获取锁,失败,将当前线程以及等待状态等信息包成一个Node节点,加入到同步队列(sync queue)中,接着不断循环尝试获取锁,条件是:当前节点为head的节点直接后继才会尝试,如果失败就阻塞自己,直到被唤醒,当持有锁的线程释放锁时,会唤醒队列中的后继线程。

clipboard.png

AQS同步组件:

CountDownLatch

Semaphore

CyclicBarrier

ReentrantLock

Condition

FutureTask

CountDownLatch 计数器,阻塞线程,保证子线程执行完成后再执行主线程(一定时间内,执行子线程数量内)

其他的阻塞线程方法:https://blog.csdn.net/wk1134314305/article/details/74094406

Semaphore 信号量,控制并发访问的线程个数,控制资源有限访问数

你可能感兴趣的:(第七章)