锁-AQS篇

发布时间 2023-12-05 22:44:32作者: 轻寒

概念:

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中实现了对等待队列的默认实现,子类只要重写部分的代码即可实现(大量用到了模板代码)