锁-AQS篇
概念:
AQS是一种比较经典的模板方法模式的JDK应用
AQS其实就是一个可以给我们实现锁的框架
内部实现的关键是:
- 先进先出的队列、state状态
- 定义了内部类ConditionObject
拥有两种线程模式:
- 独占模式
- 共享模式
相关锁:
- 在LOCK包中的相关锁(常用的有ReentrantLock、 ReadWriteLock)都是基于AQS来构建
- AQS是ReentrantReadWriteLock和ReentrantLock的基础,因为默认的实现都是在内部类Syn中,而Syn是继承AQS的
- ReentrantReadWriteLock和ReentrantLock都支持公平和非公平模式,公平模式下会去看FIFO队列线程是否是在队头,而非公平模式下是没有的
- ReentrantReadWriteLock是一个读写锁,如果读的线程比写的线程要多很多的话,那可以考虑使用它。它使用state的变量高16位是读锁,低16位是写锁
- 一般我们叫AQS为同步器
总结
- juc包中很多可阻塞的类都是基于AQS构建的
- AQS可以说是一个给予实现同步锁、同步器的一个框架,很多实现类都在它的的基础上构建的
- 在AQS中实现了对等待队列的默认实现,子类只要重写部分的代码即可实现(大量用到了模板代码)