AQS是多线程对共享资源的访问控制
多线程:占用线程1、等待线程2...等待线程n
共享资源:state
这些线表示多线程对共享资源的访问
双向队列进行访问控制【控制体现在两方面:有多少线程去占用资源;占用线程执行完后,执行哪个/哪些线程;】
面试时聊聊对AQS的理解:
1.定义:AQS是多线程对共享资源的访问控制
2.解释:多线程体现在双向队列,每一个节点都是一个线程;
有多少线程能够同时访问资源取决于资源有多少以及当前访问线程的策略是什么样的;
线程访问资源是有一些策略的,是通过双向队列实现的;
AQS 资源共享方式
AQS 定义两种资源共享方式:Exclusive
(独占,只有一个线程能执行,如ReentrantLock
)和Share
(共享,多个线程可同时执行,如Semaphore
/CountDownLatch
)。
一般来说,自定义同步器的共享方式要么是独占,要么是共享,他们也只需实现tryAcquire-tryRelease
、tryAcquireShared-tryReleaseShared
中的一种即可。但 AQS 也支持自定义同步器同时实现独占和共享两种方式,如ReentrantReadWriteLock
。